3

selectOneMenu と値の設定について質問があります。ID、Text、および を持つ Object SampleDesc がありますList<SampleDescValues>。各データテーブル行のテキストは出力ラベルで、選択メニューの値はList<SampleDescValues>. XHTML:

    <h:panelGroup id="tables">
    <p:dataTable resizableColumns="true" 
             var="sampleDesc" id="SampleDescTable" rowIndexVar="rowIndex"
                     value="#{sampleBean.sampleDescList.list}" 
                     rendered="#{sampleBean.sampleDescList.list.size() gt 0}">
            <p:column>
                    <h:outputLabel value="#{sampleDesc.sampleDescText}"/>
                </p:column>
        <p:column>
            <h:selectOneMenu required="#{sampleBean.sampleDescList.list.size() gt 0}" converter="#{sampleDescValueConverter}" 
                                                         id="SampleDescValue" value="#{sampleBean.selectedSampleDescList.get(rowIndex)}">                                                         
                <f:selectItem itemLabel="Select One" itemValue="#{null}"/>
                            <f:selectItems value="#{sampleDesc.sampleDescValues}" var="sdv" 
                                       itemLabel="#{sdv.sampleDescValuesText}" itemValue="#{sdv}" />

                        </h:selectOneMenu>
                </p:column>    
        </p:dataTable>
</h:panelGroup>   

コンバーターのセットアップがあり、それを単一の SampleDescValue に設定して値を設定したため、動作します。

問題は、フォームにデータベースのサンプルを入力しようとすると、selectonemenu の数が無限にある場合にドロップダウンの 1 つしか設定できないことです。

選択した値をprivate List<SampleDescValue> selectedSampleDescList;

送信しようとしても何もしませんが、データテーブルがレンダリングされていないときに機能します。

4

1 に答える 1

2

メニューの値が間違っています:

<h:selectOneMenu value="#{sampleBean.selectedSampleDescList.get(rowIndex)}">

setこの EL 式に対して操作を実行することはできません。

代わりにブレース表記を使用します。

<h:selectOneMenu value="#{sampleBean.selectedSampleDescList[rowIndex]}">

これは非 null を想定していることに注意してくださいselectedSampleDescListnew ArrayList<>()そのため、事前に a で適切に初期化していることを確認してください。ELはあなたのためにそれをしません。List#add(index, object)メソッドを使用してリスト項目のみを設定します。

以下も参照してください。


具体的な問題とは関係なく、この式

#{sampleBean.sampleDescList.list.size() gt 0}

次のように簡略化できます

#{not empty sampleBean.sampleDescList.list}

そして、これは常にその時点で評価されるため、 のrequired属性では不要です。代わりに直接使用してください。<h:selectOneMenu>truerequired="true"

于 2012-10-22T17:07:48.080 に答える