簡體   English   中英

JSF復合組件驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM