Hi,
i had to change
 <parameter name="title" default-value="Help Title" />
to
<parameter name="title" default-value="literal:Help Title" />
and of course i didn't include the helpballoon+prototype javascript
but i got it to run...

Problem is i can't reproduce what you're seeing

On Mon, Oct 26, 2009 at 10:39 AM, Marc van Kempen <m...@bowtie.nl> wrote:
> Hi Andreas,
>
> I've tried Tapestry 4.1.6, same result :( And my ognl version is 2.7.3.
>
> Are you able to reproduce it with the code I sent?
>
> Cheers,
> Marc.
>
> On Oct 24, 2009, at 21:03 , Andreas Andreou wrote:
>
>> Hmm - don't see anything wrong... Are you using the latest ognl ...
>> afaik it's 2.7.3
>>
>> Also, even though i dont remember (and kind find) any such bug report,
>> how hard is
>> it to try this with 4.1.6 ?
>>
>> On Sat, Oct 24, 2009 at 9:08 PM, Marc van Kempen <m...@bowtie.nl> wrote:
>>>
>>> Hi Andreas,
>>>
>>> When the application starts, first a page is displayed that contains the
>>> HelpBalloonDialog component, hence it's script expression is compiled
>>> into
>>> the expression cache. Then I open a page that uses the Dialog component,
>>> now
>>> it seems to retrieve the compiled expression for the other script and
>>> poof!
>>>
>>> Here is the exception:
>>>
>>> [ +/- ] Exception: Unable to read OGNL expression '<parsed OGNL
>>> expression>'
>>> of {component=$dialog_...@b03d85e5[assetsmanagement/fileManager.$Dialog],
>>> widget=dialog,
>>>
>>> props={"bgColor":"black","bgOpacity":0.4000000059604645,"followScroll":true,"closeOnBackgroundClick":false,"blockDuration":0,"lifeTime":0,"toggle":"fade","toggleDuration":150}}:
>>> $Dialog_142 cannot be cast to
>>> nl.relate4u.pcc.contexthelp.HelpBalloonDialog
>>> org.apache.hivemind.ApplicationRuntimeException
>>> location:       classpath:/org/apache/tapestry/dojo/html/Dialog.script,
>>> line
>>> 36, column 43
>>> 31               </unique>
>>> 32           </body>
>>> 33
>>> 34           <initialization>
>>> 35
>>> tapestry.widget.synchronizeWidgetState("${component.clientId}", "Dialog",
>>> ${props}, ${component.destroy});
>>> 36               <if expression="component.hidden">
>>> 37                   dojo.widget.byId("${component.clientId}").hide();
>>> 38               </if>
>>> 39               <if-not expression="component.hidden">
>>> 40                   dojo.widget.byId("${component.clientId}").show();
>>> 41               </if-not>
>>>
>>> [ +/- ] Exception: Unable to read OGNL expression '<parsed OGNL
>>> expression>'
>>> of {component=$dialog_...@b03d85e5[assetsmanagement/fileManager.$Dialog],
>>> widget=dialog,
>>>
>>> props={"bgColor":"black","bgOpacity":0.4000000059604645,"followScroll":true,"closeOnBackgroundClick":false,"blockDuration":0,"lifeTime":0,"toggle":"fade","toggleDuration":150}}:
>>> $Dialog_142 cannot be cast to
>>> nl.relate4u.pcc.contexthelp.HelpBalloonDialog
>>>  [ +/- ] Exception: $Dialog_142 cannot be cast to
>>> nl.relate4u.pcc.contexthelp.HelpBalloonDialog
>>> java.lang.ClassCastException
>>> Stack Trace:
>>> $ASTChain_12487ac4bf9.get($ASTChain_12487ac4bf9.java)
>>>
>>> org.apache.tapestry.services.impl.ExpressionEvaluatorImpl.read(ExpressionEvaluatorImpl.java:141)
>>>
>>> org.apache.tapestry.services.impl.ExpressionEvaluatorImpl.read(ExpressionEvaluatorImpl.java:110)
>>>
>>> $ExpressionEvaluator_12487ac4a68.read($ExpressionEvaluator_12487ac4a68.java)
>>>
>>> org.apache.tapestry.script.ScriptSessionImpl.evaluate(ScriptSessionImpl.java:86)
>>>
>>> org.apache.tapestry.script.ScriptSessionImpl.evaluate(ScriptSessionImpl.java:91)
>>>
>>> org.apache.tapestry.script.AbstractToken.evaluateBoolean(AbstractToken.java:102)
>>> org.apache.tapestry.script.IfToken.evaluate(IfToken.java:43)
>>> org.apache.tapestry.script.IfToken.write(IfToken.java:48)
>>>
>>> org.apache.tapestry.script.AbstractToken.writeChildren(AbstractToken.java:71)
>>> org.apache.tapestry.script.InitToken.write(InitToken.java:43)
>>>
>>> org.apache.tapestry.script.AbstractToken.writeChildren(AbstractToken.java:71)
>>> org.apache.tapestry.script.ParsedScript.execute(ParsedScript.java:82)
>>> org.apache.tapestry.dojo.html.Dialog.renderWidget(Dialog.java:106)
>>> (rest of stack trace omitted)
>>> Here is the code for HelpBalloonDialog (the dialog component is the
>>> standard
>>> Tapestry component included in the distribution):
>>>
>>> HelpBalloonDialog.java:
>>>
>>> package nl.relate4u.pcc.contexthelp;
>>>
>>> import java.util.HashMap;
>>> import java.util.Map;
>>>
>>> import org.apache.tapestry.IMarkupWriter;
>>> import org.apache.tapestry.IRequestCycle;
>>> import org.apache.tapestry.IScript;
>>> import org.apache.tapestry.TapestryUtils;
>>> import org.apache.tapestry.dojo.AbstractWidget;
>>> import org.apache.tapestry.services.ResponseBuilder;
>>>
>>> /**
>>>  * Implementation of HelpBalloons, by calling custom javascript code.
>>>  */
>>> public abstract class HelpBalloonDialog extends AbstractWidget {
>>>   public abstract boolean isHidden();
>>>
>>>   public abstract void setHidden(boolean hidden);
>>>
>>>   public abstract String getIconElementId();
>>>
>>>   public abstract void setIconElementId(String v);
>>>
>>>   public abstract void setTitle(String title);
>>>
>>>   public abstract String getTitle();
>>>
>>>   public void show() {
>>>       setHidden(false);
>>>   }
>>>
>>>   public void hide() {
>>>       setHidden(true);
>>>   }
>>>
>>>   /**
>>>    * {...@inheritdoc}
>>>    */
>>>   public void renderWidget(IMarkupWriter writer, IRequestCycle cycle) {
>>>       if (!cycle.isRewinding()) {
>>>           writer.begin(getTemplateTagName()); // use element specified
>>>           renderIdAttribute(writer, cycle); // render id="" client id
>>>           renderInformalParameters(writer, cycle);
>>>       }
>>>
>>>       renderBody(writer, cycle);
>>>
>>>       if (!cycle.isRewinding()) writer.end();
>>>
>>>       if (!cycle.isRewinding()) {
>>>           Map<String, Object> parms = new HashMap<String, Object>();
>>>           parms.put("component", this);
>>>
>>>           getScript().execute(this, cycle,
>>> TapestryUtils.getPageRenderSupport(cycle, this), parms);
>>>
>>>           if (isResizing()) {
>>>               if
>>> (!getResponseBuilder().isInitializationScriptAllowed(this)) {
>>>                   getResponseBuilder().updateComponent(getId());
>>>               }
>>>
>>>               getResponseBuilder().addScriptAfterInitialization(this,
>>>                       "dojo.widget.byId('" + getClientId() +
>>> "').checkSize();");
>>>           }
>>>       }
>>>   }
>>>
>>>   public abstract ResponseBuilder getResponseBuilder();
>>>
>>>   // TODO left over from Dialog code, do we need the resize stuff??
>>>   public abstract boolean isResizing();
>>>
>>>   public abstract void setResizing(boolean value);
>>>
>>>   /** injected. */
>>>   public abstract IScript getScript();
>>> }
>>>
>>> HelpBalloonDialog.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="nl.relate4u.pcc.contexthelp.HelpBalloonDialog"
>>>                        allow-body="yes" allow-informal-parameters="yes">
>>>
>>>   <description>
>>>       Creates a HelpBalloon Dialog.
>>>   </description>
>>>
>>>   <parameter name="hidden" default-value="ognl:true" />
>>>       <parameter name="title" default-value="Help Title" />
>>>       <parameter name="iconElementId" default-value="unknown" />
>>>
>>>   <inject property="script" type="script"
>>> object="HelpBalloonDialog.script"/>
>>>
>>> </component-specification>
>>>
>>> HelpBalloonDialog.script:
>>>
>>> <?xml version="1.0"?>
>>> <!DOCTYPE script PUBLIC
>>>       "-//Apache Software Foundation//Tapestry Script Specification
>>> 3.0//EN"
>>>       "http://tapestry.apache.org/dtd/Script_3_0.dtd";>
>>> <script>
>>>   <input-symbol key="component" required="yes" />
>>>
>>>   <initialization>
>>>       <if expression="component.hidden">
>>>           if (helpBalloonPlaceHolder) {
>>>               helpBalloonPlaceHolder.hide();
>>>               /*
>>>                * remove the help balloon dialog from the balloon and put
>>> it
>>> back
>>>                * under the helpBalloonUpdateArea (which is not visible)
>>>                */
>>>               var helpBalloonDialog =
>>> document.getElementById('${component.clientId}');
>>>
>>> helpBalloonDialog.parentNode.removeChild(helpBalloonDialog);
>>>
>>>
>>>  document.getElementById('helpBalloonUpdateArea').appendChild(helpBalloonDialog);
>>>               helpBalloonPlaceHolder = null;
>>>           }
>>>       </if>
>>>       <if-not expression="component.hidden">
>>>           /*
>>>            * The help balloon object will move the component from the
>>>            * helpBalloonUpdateArea to under its own element hierarchy,
>>>            * when we hide the balloon we move it back again, see above.
>>>            */
>>>                   helpBalloonPlaceHolder = new HelpBalloon({
>>>                       title: "${component.title}",
>>>                       content: '${component.clientId}',
>>>                       icon:
>>> document.getElementById('${component.iconElementId}'),
>>>                       returnElement: true,
>>>                       anchorPosition: 'top right'
>>>               });
>>>                       helpBalloonPlaceHolder.show();
>>>       </if-not>
>>>   </initialization>
>>> </script>
>>>
>>>
>>> On Oct 24, 2009, at 16:21 , Andreas Andreou wrote:
>>>
>>>> I can't really see what's going on.. is it possible to include the
>>>> exception and/or
>>>> some related code?
>>>>
>>>> On Sat, Oct 24, 2009 at 2:44 PM, Marc van Kempen <m...@bowtie.nl> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I have copied and changed the Dialog component in my project (Tapestry
>>>>> 4.1.5) in order to create a HelpBalloon popup. This gives me the
>>>>> following
>>>>> files that I've added to my project:
>>>>>
>>>>> HelpBalloonDialog.java
>>>>> HelpBalloonDialog.jwc
>>>>> HelpBalloonDialog.script
>>>>>
>>>>>  I kept the condition checking the same as in Dialog.script, i.e.:
>>>>>
>>>>> <script>
>>>>>  <input-symbol key="component" required="yes" />
>>>>>
>>>>>  <initialization>
>>>>>      <if expression="component.hidden">
>>>>>              do_stuff();
>>>>>      </if>
>>>>>      <if-not expression="component.hidden">
>>>>>              do_different_stuff();
>>>>>      </if-not>
>>>>>  </initialization>
>>>>> </script>
>>>>>
>>>>> This is essentially the same construction as Dialog.script uses, and
>>>>> most
>>>>> importantly the expression string "component.hidden" is exactly the
>>>>> same.
>>>>> Requesting a page however where Dialog is used gives me a cast
>>>>> exception
>>>>> when it tries to use the cached compiled expression that it finds.
>>>>> Changing
>>>>> the name "component" to something else makes the problem go away.
>>>>>
>>>>> Now, looking at the code I'm seeing the following:
>>>>>
>>>>> The ExpressionCache uses the symbol map in ScriptSessionImpl as its
>>>>> key,
>>>>> so
>>>>> therefore the cache should be local to a script and I should be allowed
>>>>> to
>>>>> use the same expression in different scripts.
>>>>>
>>>>> Is this the intended behaviour, am I missing something or am I looking
>>>>> at
>>>>> a
>>>>> bug?
>>>>>
>>>>> Kind regards,
>>>>> Marc van Kempen.
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Andreas Andreou - andy...@apache.org - http://blog.andyhot.gr
>>>> Tapestry / Tacos developer
>>>> Open Source / JEE Consulting
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>
>>>
>>>
>>
>>
>>
>> --
>> Andreas Andreou - andy...@apache.org - http://blog.andyhot.gr
>> Tapestry / Tacos developer
>> Open Source / JEE Consulting
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>



-- 
Andreas Andreou - andy...@apache.org - http://blog.andyhot.gr
Tapestry / Tacos developer
Open Source / JEE Consulting

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to