Jsf 更改ui中输入的属性:重复

Jsf 更改ui中输入的属性:重复,jsf,facelets,repeat,Jsf,Facelets,Repeat,我想更改位于ui:repeat中的InputText的“required”属性,但我无法从ManagedBean访问该组件: <h:selectManyCheckbox id="required" value="#{test.required}" layout="lineDirection" converter="javax.faces.Integer"> <f:ajax event="change" listener="#{test.update}" />

我想更改位于ui:repeat中的InputText的“required”属性,但我无法从ManagedBean访问该组件:

<h:selectManyCheckbox id="required" value="#{test.required}"
    layout="lineDirection" converter="javax.faces.Integer">
    <f:ajax event="change" listener="#{test.update}" />
    <f:selectItems value="#{test.selectable}"></f:selectItems>
</h:selectManyCheckbox>
<ui:repeat value="#{test.names}" var="name" id="repeat">
    <h:panelGrid columns="3">
        <h:outputLabel id="nameLabel">name:</h:outputLabel>
        <h:inputText id="name" value="#{name}"
            validator="#{test.validateName}" />
        <h:message for="name"></h:message>
    </h:panelGrid>
</ui:repeat>

ui:repeat
不会在视图根目录中重复组件,而是在呈现的HTML输出中重复组件的输出

有几种方法可以正确地实现这一点。其中一种方法是使用一个value对象,并在那里设置requireness。例如,一个
列表
,其中
具有
字符串名
布尔值必需的属性

<ui:repeat value="#{test.items}" var="item" id="repeat">
    <h:panelGrid columns="3">
         <h:outputLabel id="nameLabel">name:</h:outputLabel>
         <h:inputText id="name" value="#{item.name}" required="#{item.required}" validator="#{test.validateName}" />
         <h:message for="name"></h:message>
    </h:panelGrid>
</ui:repeat>

姓名:

有更多的方法,但由于您使用的是JSF版本,功能需求不明确,因此只能猜测哪种方法最适用于您的情况。

功能需求是,当您单击复选框选择一个项目时,必须需要相应的inputText。想想可本地化的数据,复选框将是区域设置,InputExt将显示每个区域设置的本地化数据。应该只需要所选区域设置的InputExt。例如,如果您想为给定的书籍添加翻译后的标题,但只需将已翻译的语言添加到其中即可。要求是合理的。您是否愿意将
h:panelGrid
第一列中的
h:selectBooleanCheckbox
替换为
h:selectManyCheckbox
?复选框和inputtext在同一个重复中更容易。代码只是一个用例,真正的形式要复杂得多,甚至还有jquery功能来显示/隐藏必填字段。所以问题是,是否有任何方法可以访问ManagedBean或其他组件(如验证器)中Java代码的UIRepeat中的HTMLInputText实例。
<ui:repeat value="#{test.items}" var="item" id="repeat">
    <h:panelGrid columns="3">
         <h:outputLabel id="nameLabel">name:</h:outputLabel>
         <h:inputText id="name" value="#{item.name}" required="#{item.required}" validator="#{test.validateName}" />
         <h:message for="name"></h:message>
    </h:panelGrid>
</ui:repeat>