0

jsf オートコンプリート要素に関して問題があります。ページにオートコンプリート要素を追加したいのですが、ユーザーがフィールドから値を選択すると、別のフィールドが自動的に作成されます。オートコンプリート フィールドの最大数は 3 であるため、3 番目のフィールドの後、4 番目のフィールドは無効になります。

<h:outputLabel for="fieldsOfStudy" value="#{amsg.fieldsOfStudy}"/>

<p:outputPanel id="fieldsOfStudy" autoUpdate="true" layout="block">
     <ui:repeat value="#{cc.attrs.offer.fieldsOfStudy}" var="studyField" varStatus="status">

          <h:panelGroup id="studyField" layout="block">
              <h:outputText value="#{amsg.handleGetObject(enumHelper.toMessageKey(studyField))}"/>
              <p:commandLink action="#{cc.attrs.offer.removeFieldOfStudy(status.index)}" process="@this"
                       update="@([id$=fieldsOfStudyAutocomplete])" styleClass="ui-icon ui-icon-close"/>
          </h:panelGroup>

     </ui:repeat>
</p:outputPanel>

<h:message for="fieldsOfStudy" errorClass="error"/>

<h:panelGroup id="fieldsOfStudyAutocomplete">
     <p:autoComplete value="#{offerBean.selectedFieldOfStudy}" dropdown="true" required="#{empty cc.attrs.offer.fieldsOfStudy}"
                       completeMethod="#{offerBean.completeFieldsOfStudy}" disabled="#{cc.attrs.offer.fieldsOfStudy.size() &gt;= 3}"
                       itemValue="#{p}" var="p" itemLabel="#{amsg.handleGetObject(enumHelper.toMessageKey(p))}" styleClass="xLargeInput">
              <p:ajax event="itemSelect" process="@this" update="@this"/>
     </p:autoComplete>
</h:panelGroup>

すべてがこのようにうまく機能しますが、問題は、「研究分野」リストにオートコンプリートから選択された要素が 1 つある場合、ユーザーが [保存] ボタンを押すたびに、リストに null 値を持つ別の要素が存在することです。2 つの「研究分野」が選択されている場合、3 番目のものも作成されますが、null 値はありません。選択された「研究分野」が 3 つある場合、リストに 4 番目の要素はありません。

null フィールドを無視するようにオートコンプリートを設定する方法はありますか? つまり、ユーザーがオートコンプリートから何も選択しない場合、どのように null 値を DTO に渡さないのでしょうか?

4

1 に答える 1

0

私は方法を発見しました。Bean に値を設定する場合、次のような if ステートメントを簡単に配置できます。

public void setSelectedFieldOfStudy(FieldOfStudy selectedFieldOfStudy) {
    if (selectedFieldOfStudy != null) {
        this.emptyOffer.getFieldsOfStudy().add(selectedFieldOfStudy);
    }
}
于 2012-08-08T10:09:59.343 に答える