Измените свойства ввода в пользовательском интерфейсе: repeat - PullRequest
0 голосов
/ 06 декабря 2010

Я хотел бы изменить свойство required для InputText, который находится внутри пользовательского интерфейса: repeat, но я не могу получить доступ к компоненту из 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>

Я пытаюсь использовать метод findComponent, но он не работает:

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 Ответ

1 голос
/ 06 декабря 2010

ui:repeat не повторяет компоненты в корне представления, оно повторяет вывод компонента в визуализированном выводе HTML.

Есть несколько способов добиться этого правильно. Одним из них является использование объекта-значения вместо этого и установка там потребности. Например. List<Item>, где Item имеет свойства String name и 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>

Есть и другие способы, но поскольку используемая версия JSF и функциональные требования неясны, остается только догадываться, какой способ наиболее применим в вашем случае.

...