我有关于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() >= 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个选定的“研究领域”,则列表中不会有任何第4个元素。
有什么办法可以设置自动完成功能来忽略空字段吗?换句话说,如果用户没有从自动完成中选择任何内容,那么如何不将空值传递给DTO?
答案 0 :(得分:0)
public void setSelectedFieldOfStudy(FieldOfStudy selectedFieldOfStudy) {
if (selectedFieldOfStudy != null) {
this.emptyOffer.getFieldsOfStudy().add(selectedFieldOfStudy);
}
}