从JavaScript更新Primefaces selectOneMenu

时间:2013-08-12 22:02:24

标签: jsf primefaces render selectonemenu

我有一个JSF表单,其中包含一些JavaScript。当特定输入更改为值> = 10时,selectOneMenu需要动态更改其选项(是或否)。

我的jQuery:

if ($("input[id*='inputBox']").val() >= 10) {
    $("select[id*='selectOneMenu']").val("No");
    } else {
    $("select[id*='selectOneMenu']").val("Yes");
}

调试时,selectOneMenu中的值会正确更改,但UI组件不会更改其选项。如何告诉selectOneMenu更新其渲染值?

2 个答案:

答案 0 :(得分:5)

PrimeFaces SelectOneMenu不是一个简单的选择标记,它是一个div组合在一起使它看起来像一个选择标记,使用widgetVar.selectValue(val);

选择标记隐藏在可见的UI部分中,这就是为什么它不适合你。

答案 1 :(得分:1)

最好的选择是在值切换后调用p:remoteCommand。您需要让remoteCommand更新您的selectOneMenu ID(或ID)。

<p:remoteCommand name="setNo" actionListener="#{myBean.setNo}"
    update="selectOneMenu" />
<p:remoteCommand name="setYes" actionListener="#{myBean.setYes}" 
    update="selectOneMenu" />
<SCRIPT>
var val="No"; //I'm assuming your initial value is "No"
if ($("input[id*='inputBox']").val() >= 10) {
    if (val==="Yes") {
        setNo();
        val="No";
    }
} else {
    if (val==="No") {
        setYes();
        val="Yes";
    }
}
</SCRIPT>

然后在你的支持bean中:

Map<String, String> selectBoxValues = ...
public void setNo() {
    selectBoxValues.put("No", index);
}
[ditto for yes]

当然,我已经编造了一堆变量名;你必须改变文本以适应你的真实变量。