1

JSF2 と Facelets を使用して JavaEE Web サイトを設計しています。以下のコードは、JSF コードがどのように見えるかの単なる例です。

Web サイトのユーザーが新しいユーザーを作成したいが、名などの設定を忘れた場合、エラーが発生し、要素が強調表示されます (赤い色と要素の周りの赤い枠)。強調表示するには、次の属性を使用する必要があります。

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値を使用します。さらに、現在のコンポーネントのクライアント ID を取得するために使用できます (ただし、無効なフィールドを強調表示するという特定の機能要件は、はるかに簡単な#{component.clientId}方法で解決できると思います)。

<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 に答える