Je souhaite modifier la propriété "required" d'un InputText situé dans ui: repeat, mais je ne suis pas en mesure d'accéder au composant à partir du ManagedBean:Modifier les propriétés d'une entrée dans une interface utilisateur: répétez
<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>
J'essaie d'utiliser la méthode FindComponent, mais il ne fonctionne pas:
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));
}
}
L'exigence fonctionnelle est que lorsque vous sélectionnez un élément en cochant une case, le texte inputText correspondant doit être requis. – user532357
Pensez aux données localisables, les cases à cocher seraient locales, et l'entréeTexte les données localisées pour chaque locale. Seuls les entréesTextes pour les paramètres régionaux sélectionnés doivent être requis. Par exemple, si vous voulez ajouter des titres traduits pour un livre donné, mais que vous ajoutez simplement les langues, il a été traduit. – user532357
L'exigence est saine. Êtes-vous prêt à remplacer 'h: selectManyCheckbox' par un' h: selectBooleanCheckbox' dans la 1ère colonne de 'h: panelGrid'? Il est plus facile d'avoir à la fois la case à cocher et le texte d'entrée dans la même répétition. – BalusC