Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF自动完成忽略空值_Java_Jsf_Autocomplete_Null - Fatal编程技术网

Java JSF自动完成忽略空值

Java JSF自动完成忽略空值,java,jsf,autocomplete,null,Java,Jsf,Autocomplete,Null,关于jsf自动完成元素,我有一个问题。我希望我的页面有一个autocomplete元素,当用户从字段中选择一个值后,另一个字段将自动创建。自动完成字段的maksimum编号为3,因此在第三个字段之后,第四个字段将被禁用: <h:outputLabel for="fieldsOfStudy" value="#{amsg.fieldsOfStudy}"/> <p:outputPanel id="fieldsOfStudy" autoUpdate="true" layout="bl

关于jsf自动完成元素,我有一个问题。我希望我的页面有一个autocomplete元素,当用户从字段中选择一个值后,另一个字段将自动创建。自动完成字段的maksimum编号为3,因此在第三个字段之后,第四个字段将被禁用:

<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>

一切都是这样工作的,但问题是,每当用户按下保存按钮时,如果“研究领域”列表中有一个从自动完成中选择的元素,那么列表中就会有另一个元素的值为空。如果选择了2个“研究领域”,则也将创建第3个,但将有一个空值。如果有3个选定的“研究领域”,则列表中不会有任何第四个元素


有没有办法将自动完成设置为忽略空字段?换句话说,如果用户没有从自动完成中选择任何内容,如何不将空值传递给DTO?

我找到了一种方法。在bean中设置值时,您可以很容易地放入如下if语句:

public void setSelectedFieldOfStudy(FieldOfStudy selectedFieldOfStudy) {
    if (selectedFieldOfStudy != null) {
        this.emptyOffer.getFieldsOfStudy().add(selectedFieldOfStudy);
    }
}