2012-09-26 30 views
1

我在JSF2和Facelets的幫助下設計了一個JavaEE網站。以上代碼僅僅是JSF代碼的一個例子。如何在JSF中動態設置ID號

當網站的用戶想要創建新用戶但忘記設置例如名字,發生錯誤,並且元素將被突出顯示(元素周圍的紅色和紅色框架)。 爲突出我必須使用屬性:

類= 「#{faceletUtils.getLabelStyleClass( 'createUsersForm:AllUsers的:0:名字')}」

的問題是,我必須設置數0動態的,但據我所知在JSF中不允許嵌套。我可以使用#{curUser.number}來獲取號碼。

問題:如何在for和class屬性中設置數字?

用於= 「createUsersForm:AllUsers的:0:名字」 類= 「#{faceletUtils.getLabelStyleClass( 'createUsersForm:AllUsers的:0:名字')}」

的JSF碼的一個例子:

<h:form id="createUsersForm"> 
    <ui:repeat id="allUsers" value="#{createUserController.users}" var="curUser"> 
    <div class="formLine"> 
     <label for="createUsersForm:allUsers:0:firstName" class="#{faceletUtils.getLabelStyleClass('createUsersForm:allUsers:0:firstName')}"> 
     <h:outputText value="#{userStaticText['user.firstName.label']}"/> 
     </label> 
     <h:inputText id="firstName" value="#{curUser.firstName}" class="#{faceletUtils.getLabelStyleClass('createUsersForm:allUsers:0:firstName')}"/> 
    </div> 
    </ui:repeat> 
</h:form> 

最好的問候, 賈納

回答

1

只需使用<h:outputLabel>代替<label>。 JSF將自動使用正確的for值。此外,您可以使用#{component.clientId}獲取當前組件的客戶端ID(儘管我認爲突出顯示無效字段的特定功能要求可以通過much simpler方式解決)。

<h:form id="createUsersForm"> 
    <ui:repeat id="allUsers" value="#{createUserController.users}" var="curUser"> 
    <div class="formLine"> 
     <h:outputLabel for="firstName" styleClass="#{faceletUtils.getLabelStyleClass(component.clientId)}" 
      value="#{userStaticText['user.firstName.label']}"/> 
     <h:inputText id="firstName" value="#{curUser.firstName}" styleClass="#{faceletUtils.getLabelStyleClass(component.clientId)}"/> 
    </div> 
    </ui:repeat> 
</h:form> 

注意,我固定的<h:inputText>錯誤class屬性爲好。

+0

非常感謝。 解決了我的問題。我必須這樣強調元素,因爲它就像一個約定。 –