ui:include - richPanelMenu - a4j - Lifecycle problem
dragnic May 2, 2011 12:23 PMHey dudes,
i researched a lot of articles and posts, but i actually dont get the solution that fits
i am using richfaces 4 with faclets.
i generated a menu with richPanelMenu.. but maybe the code is much more helpfull...
<div class='formContainer'>
<div class='formMenu'>
<h:form>
<rich:panelMenu mode='ajax' groupMode='ajax'
itemChangeListener="#{fgr.updateValue}">
<c:forEach items='#{fgr.formItems}' var='formItem'>
<rich:panelMenuItem label='#{formItem.name}' name='#{formItem.template}' render='formContent' execute='@region'/>
</c:forEach>
</rich:panelMenu>
</h:form>
</div><!-- .formMenu -->
<div class='formContent'>
<a4j:outputPanel id='formContent'>
#{fgr.value}
<ui:include src="#{fgr.value}" />
</a4j:outputPanel>
</div><!-- .formContent -->
</div><!-- .formContainer -->
and the bean i am using
import java.util.LinkedList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.event.FacesEvent;
import javax.inject.Named;
import javax.inject.Singleton;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import ******.JsfResource;
import org.richfaces.event.ItemChangeEvent;
@Named
@Singleton
public class Fgr {
static final Log logger = LogFactory.getLog(Fgr.class);
private List<FormItem> formItems;
private String value;
public Fgr() {}
@PostConstruct
private void postConstruct() {
formItems = new LinkedList<FormItem>();
}
public List<FormItem> getFormItems() {
if(formItems.size() <= 0) {
formItems.add(new FormItem("fID1", JsfResource.getJsfResource("portalMain", "formsMenuNewPerson"), "/views/forms/personForm.xhtml"));
formItems.add(new FormItem("fID2", JsfResource.getJsfResource("portalMain", "formsMenuNewOrganisation"), "/views/forms/oragnisationForm.xhtml"));
formItems.add(new FormItem("fID3", JsfResource.getJsfResource("portalMain", "formsMenuNewDevice"), "/views/forms/deviceForm.xhtml"));
}
return formItems;
}
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
public void updateValue(ItemChangeEvent event) {
logger.info("got itemchangedevent");
setValue(event.getNewItemName());
}
}
my problem now is, that the ui:include always using an old bean value.. so if i click on the fist button, the bean-value is correct but the ui:include shows nothing, if i click second, the ui:include shows the first template and the bean the second value..
i think i have some trouble with the lifecycle but i acutally dont know how the fix it..
any help would be great =)