Change the properties of an Input within a ui:repeat

断了今生、忘了曾经 提交于 2019-12-25 03:42:11

问题


I'd like to change the "required" property of an InputText that is located within an ui:repeat, but I'm not able to access to the component from the 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>

I'm trying to use the findComponent method, but it does not work:

public void update(AjaxBehaviorEvent event) {
    for(Integer i: selectable) {
        UIViewRoot vr = FacesContext.getCurrentInstance().getViewRoot();
        HtmlInputText input = (HtmlInputText)vr.findComponent("form:repeat:"+i+":name");
        input.setRequired(required.contains(i));
    }
}

回答1:


The ui:repeat doesn't repeat the components in the view root, it repeats the component's output in the rendered HTML output.

There are several ways to achieve this properly. One of them is to use a value object instead and set the requireness there. E.g. a List<Item> wherein Item has the properties String name and boolean required.

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

There are more ways, but since the JSF version you're using and the functional requirement is unclear, it's only guessing which way is the most applicable in your case.



来源:https://stackoverflow.com/questions/4367224/change-the-properties-of-an-input-within-a-uirepeat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!