2013-01-10 59 views
1

我想根据所选项目更改菜单的外观。如何使用selectOneListBox和AJAX动态更改panelGroup

如何使用托管bean获取selectonelistbox的值?

豆源:

public void selectOneMenuListener(ValueChangeEvent event) { 
    Object newValue = (String) event.getNewValue(); 
    selectedMenu = newValue.toString(); 
} 

public String getSelectedMenu() { 
    return selectedMenu; 
} 

public void setSelectedMenu(String selectedMenu) { 
    this.selectedMenu = selectedMenu; 
} 

页:

<h:panelGroup id="panel"> 
    <h:selectOneListbox id="katProduktu" valueChangeListener="#{produkt_KatBean.selectOneMenuListener}"> 
     <f:selectItems value="#{produkt_KatBean.produkt_KatAllList}" 
      var="pk" itemLabel="#{pk.symbol}" itemValue="#{pk.id}"/> 
     <f:ajax render="produktMenu" event="change" execute="@this" /> 
    </h:selectOneListbox> 
</h:panelGroup> 

<h:panelGroup layout="block" id="produktMenu"> 
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==1}"> 
     Menu 1 
    </h:panelGroup> 
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==2}"> 
     Menu 2 
    </h:panelGroup> 
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==3}"> 
     Menu 3 
    </h:panelGroup>  
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==4}"> 
     Manu 4 
    </h:panelGroup> 
</h:panelGroup> 

谢谢!

回答

0

请勿使用valueChangeListener。这是工作的错误工具。只需将该属性绑定到菜单组件的value属性并让rendered属性在该属性上截取即可。这样你根本不需要听众。您的rendered比较也不适用于字符串。你应该使用== '1'而不是== 1等等,但是这很笨拙,只是让它Long(或Integer)。

<h:panelGroup id="panel"> 
    <h:selectOneListbox id="katProduktu" value="#{produkt_KatBean.selectedMenu}"> 
     <f:selectItems value="#{produkt_KatBean.produkt_KatAllList}" 
      var="pk" itemLabel="#{pk.symbol}" itemValue="#{pk.id}"/> 
     <f:ajax render="produktMenu" /> 
    </h:selectOneListbox> 
</h:panelGroup> 

<h:panelGroup layout="block" id="produktMenu"> 
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==1}"> 
     Menu 1 
    </h:panelGroup> 
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==2}"> 
     Menu 2 
    </h:panelGroup> 
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==3}"> 
     Menu 3 
    </h:panelGroup>  
    <h:panelGroup rendered="#{produkt_KatBean.selectedMenu==4}"> 
     Manu 4 
    </h:panelGroup> 
</h:panelGroup> 

只需

private Long selectedMenu; // Or Integer? Should be the same type as #{pk.id}. 

// +getter +setter 

(请注意,我省略<f:ajax>eventexecute属性,因为它们代表已默认值)

+0

感谢您的答复,但这种方法不不工作:( – insict

+0

准确地说,这段代码拷贝到一个完全空白的页面,只有一个'',对我有效。你很好地理解了答案。另外,请尝试从开发者的角度而不是从最终用户的角度阐述“不起作用”。 ajax请求是否发送?调用者是否被调用?吸气剂是否被调用?房产类型是否合适? ajax响应是否正确?服务器日志没有错误?浏览器控制台没有错误?等等 – BalusC

+0

我收到Java异常:javax.faces.component.UpdateModelException:javax.el.PropertyNotFoundException:/index.xhtml @ 60,45 value =“#{produkt_KatBean.selectedMenu}”:属性'selectedMenu'不可写键入pl.com.pir.beans.Produkt_KatBean – insict