SelectOneMenu控件未返回选定值

时间:2014-08-17 17:24:36

标签: jsf primefaces

我遇到了SelectOneMenu控件的问题。我希望通过valueChange Ajax事件监听显示所选项目。但这不会发生。

但是,当我更改SelectOneMenu中的值然后单击“提交”按钮时,将通过“保存”显示所选值。 bean函数

无法弄清楚为什么这不起作用。非常感谢任何帮助。

感谢。

相关的xhtml代码如下:

<h:form>
<h:dataTable value="#{dynamicList.myData}" var="item" >
    <h:column>
        <h:outputText value="#{item.oracleType}"></h:outputText>
    </h:column>         
    <h:column>
        <h:selectOneMenu value="#{item.coffeeFlavour}" rendered="#{item.showLov}" >
            <f:selectItems value="#{item.coffeeList}"></f:selectItems>
            <f:ajax event="valueChange" listener="#{dynamicList.listen}" ></f:ajax>

        </h:selectOneMenu>
        <h:inputText value="#{item.coffeeFlavour}" rendered="#{item.showText}">       
        </h:inputText>

    </h:column>

    </h:dataTable>

    <p:commandButton  value="Submit" action="#{dynamicList.save}" ></p:commandButton>   

</h:form>

相关的bean代码如下:

@ManagedBean
@ViewScoped

public class DynamicList implements Serializable{
private List<OraclePrfl> oracleList=new ArrayList<OraclePrfl>();
private String coffee;
private  Map<String,String> coffeeList=new LinkedHashMap<String,String>();

public List<OraclePrfl> getOracleList() {       
return oracleList;
}

public List<OraclePrfl> getMyData()
{
oracleList.clear();
oracleList.add(new OraclePrfl("Oracle Lot Number",new HashMap<String,String>(){
{
 put("Coffee2 - Cream Latte", "Cream Latte");
 put("Coffee2 - Extreme Mocha", "Extreme Mocha");
 put("Coffee2 - Buena Vista", "Buena Vista");
 }
},true,false));

oracleList.add(new OraclePrfl("Oracle Product Number",new HashMap<String,String>(){
{
 put("ABC", "abc");put("PQR", "pqr");put("XYZ", "xyz");
}
},true,false));
oracleList.add(new OraclePrfl("Oracle Specification",new HashMap<String,String>(){
{
 put("MNP", "mnp");put("WXY", "wxy");put("XYZ", "xyz");
}
},true,false));

oracleList.add(new OraclePrfl("Address",false,true));

return oracleList;
}

public void setOracleList(List<OraclePrfl> oracleList) {
this.oracleList = oracleList;
}   

public String getCoffee() {
return coffee;
}

public void setCoffee(String coffee) {
this.coffee = coffee;
}

public Map<String,String> getCoffeeList() {
coffeeList.clear();
coffeeList.put("Coffee2 - Cream Latte", "Cream Latte"); //label, value
coffeeList.put("Coffee2 - Extreme Mocha", "Extreme Mocha");
coffeeList.put("Coffee2 - Buena Vista", "Buena Vista");
return coffeeList;
}

public void setCoffeeList(Map<String,String> coffeeList) {
this.coffeeList = coffeeList;
}

 public void save(){
 for(OraclePrfl oracle:oracleList){
  System.out.println("oracle type------"+oracle.getOracleType()+"------coffee----    
  "+oracle.getCoffeeFlavour());
  }
}

public void listen(AjaxBehaviorEvent event){        

System.out.println("calling listener "+event.getSource().toString());


for(OraclePrfl oracle:oracleList){
System.out.println("type....."+oracle.getOracleType()+"----value-----
"+oracle.getCoffeeFlavour());

    }
}

}

1 个答案:

答案 0 :(得分:0)

尝试删除活动:

<f:ajax listener="#{dynamicList.listen}" ></f:ajax>

默认为event="change"