Hi,
I'm trying to implement a pretty simple menu structure that supposed to update
the menu tree when a given link is clicked and also update the content of the
page. I've got it working but only for the first click...
First time I click on one of the given links the tree expands to show the sub
menu and the content div (main_content) updates to display the name of the link
that the user has selected. Problem is when I then click on another link
nothing happens. If I refresh the page then I can click on another link again.
Any ideas as to what I'm doing wrong?
Also for the EventListeners is there a neater way of working out which link has
been clicked rather than adding in all the elements to the EventListener
annotation? It's not really a sustainable solution once the menu structure gets
bigger. Ideally I'd want to pass through a parameter link you do with a regular
listener (e.g. the parameters definition on a DirectLink) but I can't see where
I could define this.
Relevant parts of html, page and java files are attached. I'm using the 4.1.1
snapshot on Tomcat 5.0.1.9 with Firefox.
Thanks,
Dom
Home.html
<div jwcid="[EMAIL PROTECTED]" element="literal:div">
<ul jwcid="menuItems">
<li>
<a jwcid="@Any"
id="ognl:currentMenuItem.id"
element="literal:a">
<span jwcid="@Insert" value="ognl:currentMenuItem.name"/>
</a>
<span jwcid="@If"
condition="ognl:currentMenuItem.expanded">
<ul jwcid="subMenuItems">
<li>
<a jwcid="@Any"
id="ognl:currentSubMenuItem.id"
element="literal:a">
<span jwcid="@Insert" value="ognl:currentSubMenuItem.name"/>
</a>
</li>
</ul>
</span>
</li>
</ul>
</div>
<div jwcid="[EMAIL PROTECTED]" element="literal:div">
<div jwcid="@Insert" value="ognl:selectedPage"></div>
</div>
Home.page
<property name="currentMenuItem"/>
<component id="menuItems" type="For">
<binding name="source" value="menuItems"/>
<binding name="element" value="literal:ul"/>
<binding name="value" value="currentMenuItem"/>
</component>
<property name="currentSubMenuItem"/>
<component id="subMenuItems" type="For">
<binding name="source" value="currentMenuItem.subMenus"/>
<binding name="element" value="literal:ul"/>
<binding name="value" value="currentSubMenuItem"/>
</component>
Home.java
@Persist("session")
public abstract List<MenuItem> getMenuItems();
public abstract void setMenuItems(List<MenuItem> items);
@Persist("session")
public abstract String getSelectedPage();
public abstract void setSelectedPage(String page);
@EventListener(events="onclick",
elements={"introduction", "research", "biographies"},
async=true)
public void menuSelect(BrowserEvent event){
String menu = (String)event.getTarget().get("id");
setSelectedPage(menu);
List<MenuItem> items = getMenuItems();
for (Iterator iter = items.iterator(); iter.hasNext();) {
MenuItem element = (MenuItem) iter.next();
if(element.getId().equals(menu)){
element.setExpanded(true);
} else {
element.setExpanded(false);
}
}
getRequestCycle().getResponseBuilder().updateComponent("main_menu");
getRequestCycle().getResponseBuilder().updateComponent("main_content");
}
@EventListener(events="onclick",
targets = "article_1, article_2, article_3",
async=true)
public void subMenuSelect(BrowserEvent event){
setSelectedPage((String)event.getTarget().get("id"));
getRequestCycle().getResponseBuilder().updateComponent("main_content");
}
--
This e-mail may contain confidential and/or privileged information. If you are
not the intended recipient (or have received this e-mail in error) please
notify the sender immediately and destroy this e-mail. Any unauthorized
copying, disclosure or distribution of the material in this e-mail is strictly
forbidden.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]