Primefaces 在SelectOne菜单中选择值后立即显示对话框

Primefaces 在SelectOne菜单中选择值后立即显示对话框,primefaces,Primefaces,当我在数据表内部使用时,我对p:selectonemenu有一个要求 <p:selectOneMenu value="#{buyerInProcessBean.subject}" id="buyerResponseId" > <f:selectItems value="#{buyerInProcessBe

当我在数据表内部使用时,我对p:selectonemenu有一个要求

<p:selectOneMenu value="#{buyerInProcessBean.subject}"
                            id="buyerResponseId" >
                            <f:selectItems
                                value="#{buyerInProcessBean.subjectMap[trans.decisionrule.ruleId]}"
                                var="subject" itemLabel="#{subject}" itemValue="#{subject}"></f:selectItems>
                            <f:selectItem itemLabel="Other" itemValue="Other"></f:selectItem>
                        </p:selectOneMenu>

如果我选择“其他”,则必须弹出一个对话框。否则,它不是强制性的


如何实现这种类型的要求?

您应该将函数绑定到
事件的
更改
上,找出所需选项的值是否与应打开对话框的值匹配,并在这种情况下触发
对话框。open()

请注意,Primefaces组件将
标记包装在一些div中,并在中间组件中输出选定的
,因此将事件附加到隐藏的
元素将不起作用。另一方面,例如,JSF
标记呈现
元素,因此将行为绑定到
onchange
将触发所需的行为

观点:

<h:form id="form">
    <p:selectOneMenu value="#{buyerInProcessBean.subject}" id="buyerResponseId" onchange="changeEvent(this)">
        <f:selectItems value="#{buyerInProcessBean.subjectMap[trans.decisionrule.ruleId]}" 
                       var="subject" itemLabel="#{subject}" itemValue="#{subject}" />
        <f:selectItem itemLabel="Other" itemValue="Other" />
    </p:selectOneMenu>
</h:form>
<p:dialog widgetVar="dialog">
    <h:outputText value="Additional Data" />
</p:dialog>

您可以在中添加onSelect=“your dialogWidgetVar.show()”selectOneMenu@Ali:SelectOne菜单上没有onSelect属性。可能是一次更改,但我的要求是只有当我们选择“其他”对话框时才会弹出。否则它是可选的(无需弹出)
function changeEvent(element) {
    var val = $(element).find('option:selected').text();
    if(val === 'Other') {
        dialog.show();
    }
}