p:ajax更新不会在更改两个<p:selectonemenu>组件中较低的一个时触发</p:selectonemenu>

时间:2012-12-11 16:47:18

标签: java jsf primefaces facelets

我正在使用JSF 2.0和PrimeFaces 3.4开发应用程序。我有两个下拉列表,根据选择的字段,应该在相应的输出文本中显示当前选中的项目。

我有一个<p:ajax update="outputTextId">,在<p:selectOneMenu>进行更改时会触发。问题是上面的下拉列表不会触发,但下面的下拉列表会正确触发。

项目编译正常,所有数据都正确存储。辅助bean位于会话范围内。这是相关的Facelets代码:

<h:form id="form">
    <p:selectOneMenu id="subTypePickList" value="#{MappingBean.selectedSubtype}" valueChangeListener="#{MappingBean.changeListenerSubType}">
        <p:ajax event="change" update="testSubTypeOut, itemList, queryArea, outputDisplayName" />
        <f:selectItem itemLabel="Select Field" itemValue=""/>
        <f:selectItems value="#{MappingBean.mappingStrings}" />            
    </p:selectOneMenu>  
    <br/>
    <p:inputTextarea id="queryArea" value="#{MappingBean.expression}" />
    <br/>  
    <p:selectOneMenu id="fieldPickList3" value="#{MappingBean.selectedFieldType}" valueChangeListener="#{MappingBean.changeListenerField}">
        <p:ajax event="change" update="fieldPickList3, itemList, queryArea, outputDisplayName, testSubTypeOut"/>      
        <f:selectItem itemLabel="Select Field to Update" itemValue=""/>
        <f:selectItems value="#{MappingBean.mappingStrings}" />               
    </p:selectOneMenu> 
    <br/> 
    <h:outputText id="testSubTypeOut" value="#{MappingBean.selectedSubtype}" />
    <br/>
    <h:outputText id="outputDisplayName" value="#{MappingBean.selectedFieldType}" />  
    <br/>
    <p:commandButton id="executeButton" value="Execute" />
</h:form>

这是如何引起的?如何解决?

支持Bean:我删除了与特定问题无关的大量内容。

@ManagedBean(name = "MappingBean")
@SessionScoped
public class MappingBean {
private String selectedSubType;
private String selectedFieldType;
public MappingBean() {
}

下一部分只是从云应用程序中获取字符串列表。

吸气剂:

    public String getSelectedSubtype(){
    return selectedSubType;
}
public String getSelectedFieldType(){
    return selectedFieldType;
}

塞特斯:

public void setSelectedSubType(String selectedSubType){
    this.selectedSubType = selectedSubType;
}
public void setSelectedFieldType(String selectedFieldType){
    this.selectedFieldType = selectedFieldType;
}

更改听众:

    public void changeListenerSubType(ValueChangeEvent event){ 
    selectedSubType = event.getNewValue().toString();
    setSelectedSubType(selectedSubType);
}     
    public void changeListenerField(ValueChangeEvent event){  
    selectedFieldType = event.getNewValue().toString();
    setSelectedFieldType(selectedFieldType);
}   

希望我能更好地删除我认为非常无关的内容

谢谢!

0 个答案:

没有答案