[英]JSF composite component validation
我想創建復合組件並將一些驗證器附加到其子組件,但是我希望驗證消息附加到復合組件,而不是其子組件。
在使用復合組件的頁面中,我想要這樣的東西:
<zzz:mycomponent id="my" />
<h:message for="my" />
現在它不起作用了,因為消息是針對組件的子對象的,而不是針對復合組件本身的。 如何制作整個組件?
甚至更好的是,我想向復合組件添加驗證器,例如:
<zzz:mycomponent id="my" validator="#{bean.validateComposite}" />
並接收類似於布爾數組的值,因為在復合組件內部有h:selectBooleanCheckbox
元素。 那可能嗎?
也許很晚才回答這個問題,但這是我應該怎么做:
<zzz:mycomponent id="my">
<f:event type="postValidate" listener="#{bean.doValidation}"/>
</zzz:mycomponent>
然后,在驗證“容器”中的子代之后,調用doValidation。 該方法看起來像這樣:
public void doValidation(ComponentSystemEvent event) {
...
}
該方法有2個選項:
訪問子組件(event.getComponent()。getChildren()),然后對在這些子組件上提交的值進行任何處理。
或遍歷FacesMessages並重新分配clientId,以便將它們放置在您的容器組件上(id = my)
您必須將下一個代碼放入復合定義中
<cc:interface>
.....
<cc:editableValueHolder name="attName" targets="Idcomponent" /><!--It allows to acces to the composite-->
<cc:facet name="textMessage"/> <!--Define the Facet-->
</cc:interface>
<cc:implementation id="#{cc.attrs.id}" >
......
<h:inputText id="Idcomponent" value="#{cc.attrs.value}" required="#{cc.attrs.required}"/>
<cc:renderFacet name="textMessage"/>
</cc:implementation>
您可以在JSF頁面中使用
<zzz:textBox id="txbTest" label="#{}" value="#{}" >
<f:validateLongRange for="attName" minimum="-10" maximum="10"/>
<f:facet name="textMessage">
<h:message for="value" style="color: blue"/>
</f:facet>
</zzz:textBox>
或者另一個選擇是:
<zzz:textBox id="txbTest" label="#{}" value="#{}" validator="#{bean.yourValidateMethod}" >
<f:facet name="textMessage">
<h:message for="value" style="color: blue"/>
</f:facet>
</zzz:textBox>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.