What is wrong with this approach. I am getting a duplicate Component Id Issue
Code: Select all
<h:form>
<h:panelGrid columns="1">
<h:selectOneRadio binding="#{Bean.radio}">
<p:ajax event="change" update="menu"/>
</h:selectOneRadio>
<h:selectOneMenu id="menu" binding="#{Bean.menu}"/>
</h:panelGrid>
</h:form>
Code: Select all
@javax.faces.bean.ManagedBean(name = "Bean")
@javax.faces.bean.SessionScoped
public class Bean {
HtmlSelectOneMenu menu = new HtmlSelectOneMenu();
HtmlSelectOneRadio radio = new HtmlSelectOneRadio();
public Bean() {
menu.getChildren().add(getMenuItemSet1());
radio.getChildren().add(getRadioItems());
radio.addValueChangeListener(new ValueChangeListener() {
public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {
if (((String) event.getNewValue()).equalsIgnoreCase("One")) {
menu.getChildren().clear();
menu.getChildren().add(getMenuItemSet2());
} }
});
}
private UISelectItems getRadioItems() {
List tempList = new ArrayList();
UISelectItems uISelectItems = new UISelectItems();
tempList.add(new SelectItem("One"));
tempList.add(new SelectItem("Two"));
tempList.add(new SelectItem("Three"));
uISelectItems.setValue(tempList);
return uISelectItems;
}
private UISelectItems getMenuItemSet1() {
List tempList = new ArrayList();
UISelectItems uISelectItems = new UISelectItems();
tempList.add(new SelectItem("A"));
tempList.add(new SelectItem("B"));
uISelectItems.setValue(tempList);
return uISelectItems;
}
private UISelectItems getMenuItemSet2() {
List tempList = new ArrayList();
UISelectItems uISelectItems = new UISelectItems();
tempList.add(new SelectItem("C"));
tempList.add(new SelectItem("D"));
uISelectItems.setValue(tempList);
return uISelectItems;
}
public HtmlSelectOneMenu getMenu() {
return menu;
}
public void setMenu(HtmlSelectOneMenu menu) {
this.menu = menu;
}
public HtmlSelectOneRadio getRadio() {
return radio;
}
public void setRadio(HtmlSelectOneRadio radio) {
this.radio = radio;
}
}
An Error Occurred:
Component ID j_idt6:j_id4 has already been found in the view.
+- Stack Trace
java.lang.IllegalStateException: Component ID j_idt6:j_id4 has already been found in the view.
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:724)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:708)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:708)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:708)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:708)
at com.sun.faces.application.view.StateManagementStrategyImpl.saveView(StateManagementStrategyImpl.java:136)
at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:126)
at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:221)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:397)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)
+- Component Tree
<UIViewRoot id="j_id1" inView="true" locale="en_US" renderKitId="HTML_BASIC" rendered="true" transient="false" viewId="/issue1.xhtml">
javax_faces_location_HEAD
<ComponentResourceContainer id="javax_faces_location_HEAD" inView="true" rendered="true" transient="false">
<Resource id="j_id2" inView="true" name="/yui/utilities/utilities.js" rendered="true" transient="false"/>
<Resource id="j_id3" inView="true" name="/jquery/jquery.js" rendered="true" transient="false"/>
<Resource id="j_id4" inView="true" name="/primefaces/core/core.js" rendered="true" transient="false"/>
</ComponentResourceContainer>
<?xml version="1.0" encoding="UTF-8"?> <!-- To change this template, choose Tools | Templates and open the template in the editor. --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<UIOutput id="j_idt4" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_idt5" inView="true" rendered="true" transient="false">
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_idt6" inView="true" prependId="true" rendered="true" submitted="false" transient="false">
<HtmlPanelGrid border="-2147483648" columns="1" id="j_idt7" inView="true" rendered="true" transient="false">
<HtmlSelectOneRadio border="-2147483648" disabled="false" id="j_idt8" immediate="false" inView="true" localValueSet="true" onchange="PrimeFaces.ajax.AjaxRequest('/BillingEE6/issue1.jsf',{formId:'j_idt6',global:true},{'j_idt6:j_idt9':'j_idt6:j_idt9','primefacesPartialUpdate':'j_idt6:menu'});" readonly="false" rendered="true" required="false" transient="false" valid="true" value="Three" binding="#{Bean.radio}">
<UISelectItems id="j_id2" inView="true" rendered="true" transient="false"/>
<UIAjax async="false" event="change" global="true" id="j_idt9" immediate="false" inView="true" rendered="true" transient="false" update="menu"/>
</HtmlSelectOneRadio>
<HtmlSelectOneMenu disabled="false" id="menu" immediate="false" inView="true" localValueSet="true" readonly="false" rendered="true" required="false" transient="false" valid="true" value="C" binding="#{Bean.menu}">
<UISelectItems id="j_id4" inView="true" rendered="true" transient="false"/>
<UISelectItems id="j_id4" inView="true" rendered="true" transient="false"/>
</HtmlSelectOneMenu>
</HtmlPanelGrid>
</HtmlForm>
</UIOutput>
</html>
</UIViewRoot>
JSF-2.0
PRIMEFACE : 2.0.2
SERVER : GLASSFISH v3