Es gibt ein Optionsfeld, dessen Auswahl sich je nach Parameter ändert. Wenn ich einen Artikel auswähle und poste, tritt ** "j_idt39: Validierungsfehler: Wert ist ungültig" ** auf. Es tritt nicht in einer lokalen oder Einzelinstanzumgebung auf.
Die Projektanforderungen verwendeten keine Sticky Sessions und wurden dem Server für jede Kommunikation zufällig zugewiesen. Infolgedessen wurden die Beans in der Sitzung dupliziert, und es gab eine Liste mit Optionsfeldern ohne Anfangswert (null). Leider wurde beim Posten ein Validierungsfehler angezeigt, als die Liste eine Null-Bean erreichte.
XHTML
<form jsf:id="form" jsf:prependId="false">
<h:selectOneRadio name="choiceName" value="#{choiceBean.choiceName}" styleClass="radio_list">
<f:selectItems value="#{choiceBean.choiceList}" var="prize" itemLabel="#{item.labelName}" itemValue="#{item}" />
</h:selectOneRadio>
<button jsf:action="#{pageControlBean.toConfirm()}" class="btn_orange">
Nächster
</button>
<span jsfc="h:messages" class="form_error_text" />
</form>
Bean
@Named
@SessionScoped
public class ChoiceBean implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull
@Getter @Setter
private ChoiceType choiceName;
@Getter @Setter
private List<ChoiceType> choiceList;
}
Enum
public enum ChoiceType {
TYPE1("Typ 1", 0),
TYPE2("Typ 2", 1),
TYPE3("Typ 3", 2);
@Getter
private final String labelName;
@Getter
private final int index;
private ChoiceType(String labelName, int index) {
this.labelName = labelName;
this.index = index;
}
}
Legen Sie den Anfangswert im Konstruktor fest.
Bean
@Named
@SessionScoped
public class ChoiceBean implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull
@Getter
@Setter
private PrizeType choiceName;
@Getter
@Setter
private List<ChoiceType> choiceList;
/**
* Constructor
*Anfangswerteinstellung der NotNull-Variablen
*/
public ChoiceBean() {
choiceList = new ArrayList<>();
choiceList.add(ChoiceType.TYPE1);
choiceList.add(ChoiceType.TYPE2);
choiceList.add(ChoiceType.TYPE3);
}
}
Schließlich untersuchte ich mit einer IDE (wie der kostenpflichtigen Version von Intellij), wo der Inhalt der Sitzung angezeigt werden kann, und fand eine Kopie der Bean. Es scheint, dass Sie es in NetBeans mit JavaEE sehen können.
Recommended Posts