我有一个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更新其渲染值?
答案 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]
当然,我已经编造了一堆变量名;你必须改变文本以适应你的真实变量。