【问题标题】:SelectOneMenu control not returning selected valueSelectOneMenu 控件不返回所选值
【发布时间】:2014-10-10 16:21:23
【问题描述】:

我遇到了 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());

    }
}

}

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    尝试删除事件:

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

    它应该默认为event="change"

    【讨论】:

    • 感谢您的回复。删除偶数不起作用。
    • @SvPrasad 你有 h:head 吗?您使用的是哪个 JSF 版本?也许你可以在这里找到灵感:stackoverflow.com/questions/6089924/…
    • 抱歉延迟回复。我们已经解决了这个问题。非常感谢您的回复和关注。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2012-08-21
    相关资源
    最近更新 更多