0

dataTable内で使用している場合、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>

「その他」を選択した場合、ダイアログは強制的にポップアップする必要があります。それ以外の場合は必須ではありません。

このタイプの要件をどのように達成できますか?

4

1 に答える 1

0

関数をのonchangeイベントにバインドし<p:selectOneMenu>、目的のオプションの値がダイアログを開く必要のある値と一致するかどうかを確認し、dialog.open()その場合にトリガーする必要があります。

Primefacesのコンポーネントは、<select>一部のdiv内でタグをラップ<option>し、中間コンポーネントで選択されたものを出力するため、非表示の<select>要素へのイベントのアタッチは機能しないことに注意してください。一方、たとえば、JSF<h:selectOneMenu>タグは<select>要素をレンダリングするため、にバインドされた動作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>

JavaScript:

function changeEvent(element) {
    var val = $(element).find('option:selected').text();
    if(val === 'Other') {
        dialog.show();
    }
}
于 2013-03-16T19:38:54.223 に答える