0

我有一个 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 更新其渲染值?

4

2 回答 2

5

PrimeFaces SelectOneMenu 不是一个普通的选择标签,它是一个 div 的集合,使其看起来像一个选择标签,使用 widgetVar.selectValue(val);

选择标签隐藏在可见的 UI 部分中,这就是它不适合您的原因。

于 2013-08-13T07:51:54.553 回答
1

您最好的选择是调用 ap: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]

当然,我编了一堆变量名;您将不得不更改文本以适合您的实际变量。

于 2013-08-13T01:35:48.173 回答