Hi,

Unless you just made a typo in the email, your loop is defined as :
<component id="loop" type="Form">

Should probably be:
<component id="loop" type="For">

Other than that, I have no ideas. Good luck!


--
Peter Beshai - Using Tapestry 4.1.1

Pure Mathematics Student
University of Waterloo





From: "Roberto Ramírez Vique" <[EMAIL PROTECTED]>
Reply-To: "Tapestry users" <users@tapestry.apache.org>
To: "Tapestry users" <users@tapestry.apache.org>
Subject: Re: PageRenderSupport problem (Body component is in template)
Date: Thu, 9 Nov 2006 12:03:57 +0100

Hello Peter and everybody !

I'm using tapestry 4.0, jdk 1.5 and tomcat 5.5.

I'm doing more or less the same as all of you, but I have a question.

My dojo dialogs are though to be places where the user can write information
and send it back to the server: like a way to have forms that sends
information to the server. My problem now is that all these dojo dialogs
needs a form in the same div because otherwise the submit buttons in the
dojo doesn't do anything. I understand that these dojo dialogs are rewritten
in any other place (in the DOM structure) and that's the problem why the
submit button doesn't work.
Well I have some of these popups working for list of elements, which are
modified with a dojo dialog. When I tried to save the current element (I'm
using a tag-selected of a submit button, as explained down) I always get the
last element as the modified one... Any of you have had this problem with
multiple forms ? Because is a problem of having multiple forms in a page,
because just with one form it works (but i can't have just one form due the
dojo dialog).


The way I tried to select the current element is very simple (and works with
a single form in a page, but not with a multiple form in a page):
HTML
<span jwcid="loop">
   <div jwcid="dojoDialog">
       <form jwcid="innerForm">
           <input type="text" jwcid="name"/>
           <input type="submit" jwcid="submitButton"/>
       </form>
   </div>
</span>

PAGE
<component id="loop" type="Form">
   <binding name="source" value="elementList"/>
   <binding name="value" value="currentElement"/>
</component>

<component id="personDetails" type="DojoDialogContainer"/>

<component id="innerForm" type="Form"/>

<component id="name" type="TextField">
   <binding name="value" value="currentElement.name"/>
</component>

<component id="submitButton" type="Submit">
   <binding name="selected" value="selectedElement"/>
   <binding name="tag" value="currentElement"/>
   <binding name="action" value="listener:onSubmit"/>
</component>

In the java code I get the "selectedElement" always as the last element from
the elementList but always with the correct values.

Any explanation, help, idea or something will be really appreciated,
      robert



On 10/18/06, Peter Beshai <[EMAIL PROTECTED]> wrote:

Great that fixed it up :-)

You said you had wrapped the Dialog component just yesterday, but I don't
see it in the tapestry-framework trunk. Is there somewhere I can go and
see
how you implemented it?

Oh I have another question... I had to put the .jwc  and .script file in
the
WEB-INF directory. It seems more standard to keep them in the same
location
as the .java file. Do I need to configure something to be able to store
everything in one place?

Anyway, here's the code I used, any suggestions are welcome!

Dialog.java::
import java.util.HashMap;
import java.util.Map;

import org.apache.tapestry.AbstractComponent;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.IScript;
import org.apache.tapestry.PageRenderSupport;
import org.apache.tapestry.TapestryUtils;
import org.apache.tapestry.dojo.DojoUtils;
import org.apache.tapestry.dojo.IWidget;
import org.apache.tapestry.json.JSONObject;

public abstract class Dialog extends AbstractComponent implements IWidget
{
    /** id. */
    public abstract String getIdParameter();

    /** component that handles closing the dialog */
    public abstract IComponent getCloser();

    /** component that handles showing the dialog */
    public abstract IComponent getShower();

    /** bgColor */
    public abstract String getBgColor();

    /** bgOpacity */
    public abstract Double getBgOpacity();

    /** toggle */
    public abstract String getToggle();

    /** toggleDuration */
    public abstract Integer getToggleDuration();

    /** Injected script. */
    public abstract IScript getScript();

    public void renderWidget(IMarkupWriter writer, IRequestCycle cycle)
    {
        renderComponent(writer, cycle);
    }

    @SuppressWarnings("unchecked")
    protected void renderComponent(IMarkupWriter writer, IRequestCycle
cycle)
    {
        if(cycle.isRewinding()) {
            renderBody(writer, cycle);
            return;
        }
        // configure the node
        writer.begin("div");
        writer.attribute("id", getIdParameter());

        renderInformalParameters(writer, cycle);
        renderBody(writer, cycle);

        writer.end();

        // configure the widget
        JSONObject obj = DojoUtils.parseJSONParameter(this, "options");
        obj.put("widgetId", getId());
        obj.put("toggle", getToggle());
        obj.put("toggleDuration", getToggleDuration());
        obj.put("bgColor", getBgColor());
        obj.put("bgOpacity", getBgOpacity());

        // setup script includes
        Map scriptParms = new HashMap();
        scriptParms.put("id", getIdParameter());
        scriptParms.put("props", obj.toString());
        scriptParms.put("closer", getCloser().getId());
        scriptParms.put("shower", getShower().getId());
        PageRenderSupport pageRenderSupport =
TapestryUtils.getPageRenderSupport(cycle, this);

        getScript().execute(this, cycle, pageRenderSupport, scriptParms);
    }
}

Dialog.script::
<?xml version="1.0"?>
<!DOCTYPE script PUBLIC
  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
  "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd";>
<script>
<input-symbol key="id" required="yes" />
<input-symbol key="props" required="yes" />
<input-symbol key="closer" required="yes" />
<input-symbol key="shower" required="yes" />
    <body>
        <unique>
            dojo.require("dojo.widget.Dialog");
            dojo.require("tapestry.widget.Widget");
        </unique>
    </body>
    <initialization>
        tapestry.widget.synchronizeWidgetState("${id}", "dialog",
${props});
dojo.widget.byId("${id}").setCloseControl(dojo.byId("${closer}"));
        dojo.widget.byId("${id}").setShowControl(dojo.byId("${shower}"));
    </initialization>
</script>

Dialog.jwc::
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component-specification PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd";>

<component-specification class="com.mycom.tapestry.Dialog"
        allow-body="yes"
        allow-informal-parameters="yes">

  <description>
  Creates a dojo dialog widget
  </description>

  <parameter name="closer" required="yes"/>
  <parameter name="shower" required="yes"/>

  <parameter name="bgColor" default-value="literal:white" />
  <parameter name="bgOpacity" default-value="0.5" />
  <parameter name="toggle" default-value="literal:fade"/>
  <parameter name="toggleDuration" default-value="250"/>

  <parameter name="id" property="idParameter" default-value="id"/>

  <inject property="script" type="script" object="Dialog.script"/>

</component-specification>


Peter Beshai

>From: "Jesse Kuhnert" <[EMAIL PROTECTED]>
>Reply-To: "Tapestry users" <users@tapestry.apache.org>
>To: "Tapestry users" <users@tapestry.apache.org>
>Subject: Re: PageRenderSupport problem (Body component is in template)
>Date: Wed, 18 Oct 2006 12:31:25 -0400
>
>Without the benefit of knowing what your component code is doing I am
going
>to guess that you are attempting to render your dialog component during a
>Form "rewind" cycle.
>
>The best thing to do in your case is check for cycle.isRewinding() and
skip
>over all blocks except for renderBody() .
>
>On 10/18/06, Peter Beshai <[EMAIL PROTECTED]> wrote:
>>
>>Sorry if this idea seems silly, but this is the first custom
>>component/dojo
>>widget wrapper I have made, so it basically just does the same thing as
>>calling dojo.widget.byId("yourDlgId").show().
>>
>>My dialog takes a 'shower' and a 'closer' (IComponents) as required
>>parameters -- I wasn't sure the best way to do this... but I thought it
>>would allow more flexibility by doing it this way.
>>
>>My script looks like this: (Dialog.script)
>>
>><?xml version="1.0"?>
>><!DOCTYPE script PUBLIC
>>   "-//Apache Software Foundation//Tapestry Script Specification 3.0
//EN"
>>   "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd";>
>><script>
>><input-symbol key="id" required="yes" />
>><input-symbol key="props" required="yes" />
>><input-symbol key="closer" required="yes" />
>><input-symbol key="shower" required="yes" />
>>     <body>
>>         <unique>
>>             dojo.require("dojo.widget.Dialog");
>>             dojo.require("tapestry.widget.Widget");
>>         </unique>
>>     </body>
>>     <initialization>
>>         tapestry.widget.synchronizeWidgetState("${id}", "dialog",
>>${props});
>>
>>dojo.widget.byId("${id}").setCloseControl(dojo.byId("${closer}"));
>>         dojo.widget.byId("${id}").setShowControl(dojo.byId
("${shower}"));
>>     </initialization>
>></script>
>>
>>So when I click on my shower (my form submit button) it pops up the
dialog
>>that has the closer (cancel button) and then instantaneously throws the
>>exception.
>>
>>It took me a lot longer than 10 minutes to make this (a couple of
hours!!)
>>but after it was done it all seems very simple. I just couldn't find any
>>documentation anywhere about it, so I just read through some source and
>>tried putting things together.
>>
>>When you say "I'm assuming it's not just a simple
>>dojo.widget.byId("yourDlgId").show()" are you implying that if it is
just
>>doing that, I ought to just use dojo directly in my template?
>>
>>Thanks,
>>Peter Beshai
>>
>>
>> >From: "Jesse Kuhnert" <[EMAIL PROTECTED]>
>> >Reply-To: "Tapestry users" <users@tapestry.apache.org>
>> >To: "Tapestry users" <users@tapestry.apache.org>
>> >Subject: Re: PageRenderSupport problem (Body component is in template)
>> >Date: Tue, 17 Oct 2006 22:54:39 -0400
>> >
>> >So what does it do after loading up? I'm assuming it's not just a
simple
>> >dojo.widget.byId("yourDlgId").show() ?
>> >
>> >I created the same component in 4.1.1 yesterday btw. (Took me all of
ten
>> >minutes!, of course that is expected..)
>> >
>> >On 10/17/06, Peter Beshai <[EMAIL PROTECTED]> wrote:
>> >>
>> >>Hi,
>> >>
>> >>I have created a wrapper for the dojo component Dialog and it works
>>fine
>> >>(in
>> >>general!), but I have a problem when I use it with my form. I want to
>>have
>> >>the dialog appear when I submit the form (ie, the form submit button
is
>> >>the
>> >>show controller) and the dialog will basically have a cancel button
>>(close
>> >>controller and Submit component with type cancel).
>> >>
>> >>The dialog loads fine, but soon after loading it throws an exception:
>> >>Component FileUpload/uploadingDialog requires rendering support, but
no
>> >>PageRenderSupport object has been stored into the request cycle. This
>> >>object
>> >>is typically provided by a Body component. You should add a Body
>>component
>> >>to your template.
>> >>
>> >>I do have a body component defined : <body jwcid="[EMAIL PROTECTED]">.
>> >>
>> >>Any ideas how to fix this problem?
>> >>
>> >>FYI in my Dialog.java file I have in the renderComponent function:
>> >>PageRenderSupport pageRenderSupport =
>> >>TapestryUtils.getPageRenderSupport(cycle, this);
>> >>getScript().execute(this, cycle, pageRenderSupport, scriptParms);
>> >>
>> >>
>> >>Peter Beshai
>> >>
>> >>_________________________________________________________________
>> >>Essayez la nouvelle génération de recherche avec Live Search.
>> >>http://www.live.com/?mkt=fr-ca
>> >>
>> >>
>> >>---------------------------------------------------------------------
>> >>To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >>For additional commands, e-mail: [EMAIL PROTECTED]
>> >>
>> >>
>> >
>> >
>> >--
>> >Jesse Kuhnert
>> >Tapestry/Dojo/(and a dash of TestNG), team member/developer
>> >
>> >Open source based consulting work centered around
>> >dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com
>>
>>_________________________________________________________________
>>Découvrez Live Search de votre PC ou de votre appareil mobile dès
>>aujourd'hui. http://www.live.com/?mkt=fr-ca
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
>--
>Jesse Kuhnert
>Tapestry/Dojo/(and a dash of TestNG), team member/developer
>
>Open source based consulting work centered around
>dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

_________________________________________________________________
Voyez vos amis en faisant un appel vidèo dans Windows Live Messenger
http://imagine-msn.com/messenger/launch80/default.aspx?locale=fr-ca


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
Robert Ramírez Vique
Computer Science Engineer

_________________________________________________________________
Achetez ce que vous voulez, quand vous voulez sur Sympatico / MSN Magasiner http://magasiner.sympatico.msn.ca/content/shp/?ctId=101,ptnrid=176,ptnrdata=081805


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to