1

我在 JSF2 和 Facelets 的帮助下设计了一个 JavaEE 网站。超出的代码只是 JSF 代码的示例。

当网站的用户想要创建新用户但忘记设置例如名字时,会发生错误并且元素将被突出显示(元素周围的红色和红框)。为了突出显示,我必须使用该属性:

class="#{faceletUtils.getLabelStyleClass('createUsersForm:allUsers:0:firstName')}"

问题是我必须动态设置数字 0,但据我所知,JSF 中不允许嵌套。我可以使用 #{curUser.number} 来获取号码。

问题:如何设置 for 和 class 属性中的数字?

for="createUsersForm:allUsers:0:firstName" class="#{faceletUtils.getLabelStyleClass('createUsersForm:allUsers:0:firstName')}"

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>

最好的问候,贾娜

4

1 回答 1

1

只需使用<h:outputLabel>而不是<label>. JSF 将自动使用正确的for值。此外,您可以使用#{component.clientId}获取当前组件的客户端 ID(尽管我认为突出显示无效字段的特定功能要求可以通过更简单的方式解决)。

<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>

请注意,我也修复了错误的class属性<h:inputText>

于 2012-09-26T10:38:31.807 回答