在經歷了一段絕望的嘗試和錯誤之後,我來找你尋求幫助,因爲現在我甚至不確定自己是否做得不對。在ui中沒有觸發JSF 2.2自定義驗證器:重複
我的代碼如下所示,顯示只讀輸入文本框中用戶配置文件的一些字段。數據來自一個bean,作爲「字段」對象的ArrayList,其屬性在ui:param指令中描述。 用戶可以點擊框旁邊的解鎖/鎖定按鈕開始/結束編輯她的數據。 當用戶在編輯後按下Enter或點擊鎖定按鈕時,我想觸發輸入驗證。
但無論我嘗試過,編輯並按下輸入或單擊按鈕後,更改的值不會被寫回,並且我的自定義驗證程序不會被觸發。不知何故,似乎單擊按鈕後,呈現的輸入框不會綁定到該字段?然而,驗證工作(和所有屬性獲得通過它)如果是始終呈現一個輸入文本使用的 - 我不明白:)
請看看它。如果我沒有足夠好地解釋我的意圖,或者如果您需要更多代碼,請告訴我。
編輯:支持bean的註釋:
@ManagedBean(name = "beanProfile")
@RequestScoped
了JSF代碼:
<ui:composition>
<ui:param name="i18n" value="#{field.i18n}" />
<ui:param name="val" value="#{field.value}" />
<ui:param name="req" value="#{field.required}" />
<ui:param name="min" value="#{field.min}" />
<ui:param name="max" value="#{field.max}" />
<ui:param name="validationType" value="#{field.validationType}" />
<ui:param name="useHidden" value="#{field.hidden}" />
<ui:param name="locked" value="#{field.locked}" />
<ui:param name="fullName" value="#{beanProfile.name}" />
<h:form id="profileFrm">
<h:outputText value="#{msg.role_profile} " styleClass="headingOutputText" />
<h:outputText value="#{fullName}" styleClass="headerTitle" />
<p />
<h:panelGroup>
<ui:repeat var="field" value="#{beanProfile.userFields}">
<h:panelGrid columns="2">
<h:outputText value="#{msg[i18n]}" styleClass="headerTitle" />
<h:message showDetail="true" for="visInput" styleClass="warn"
rendered="#{!useHidden}" />
<h:message showDetail="true" for="invisInput" styleClass="warn"
rendered="#{useHidden}" />
</h:panelGrid>
<h:panelGrid columns="2" columnClasses="nameColumn">
<h:inputText id="visInput" required="true" value="#{val}"
rendered="#{!useHidden}" readonly="#{locked}" >
<f:validator validatorId="customValidator" />
<f:attribute name="requiredField" value="#{req}" />
<f:attribute name="minLen" value="#{min}" />
<f:attribute name="maxLen" value="#{max}" />
<f:attribute name="type" value="#{validationType}" />
</h:inputText>
<h:inputSecret id="invisInput" required="true" value="#{val}"
rendered="#{useHidden}" readonly="#{locked}">
<f:validator validatorId="customValidator" />
<f:attribute name="requiredField" value="#{req}" />
<f:attribute name="minLen" value="#{min}" />
<f:attribute name="maxLen" value="#{max}" />
<f:attribute name="type" value="#{validationType}" />
</h:inputSecret>
<h:commandLink id="lock" action="#{beanProfile.lock(field)}"
rendered="#{!locked}" title="#{msg.profile_lock}">
<h:graphicImage height="16" width="16"
name="images/padlock_unlocked.svg" alt="#{msg.profile_lock}" />
</h:commandLink>
<h:commandLink id="unlock" action="#{beanProfile.unlock(field)}"
rendered="#{locked}" title="#{msg.profile_unlock}">
<h:graphicImage height="16" width="16"
name="images/padlock_locked.svg" alt="#{msg.profile_unlock}" />
</h:commandLink>
</h:panelGrid>
</ui:repeat>
</h:panelGroup>
<p />
<h:commandButton id="submitProfileBtn" value="#{msg.cmd_submit}"
styleClass="button" includeViewParams="true"
action="#{beanProfile.submitProfile()}" />
</h:form>
</ui:composition>
Colud你顯示應用於beanProfile' backing bean的註釋嗎? – lametaweb
更改爲ViewScoped範圍,包javax.faces.view – lametaweb
我沒有和得到這個錯誤:CDI @ViewScoped管理器不可 – Alfred