Ted jenom hadam mozne priciny chyby:
1/ v prvnim selectOneMenu mate jako onchange JavaScript submit();, tj.
vyvola se HTTP request, ale chybi nektery parametr, ktery si JSF interne
predava (selectOneMenu je komponenta UISelectOne, a ta neimplementuje
ActionSource, commandButton je UICommand, ktery ActionSource
implementuje, takze tady je to "zarizeno interne"), diky tomu nemuze
korektne probehnout cely zivotni cyklus.
2/ Nebylo v zjednoduseni opominuto ze SelectItem obsahuje i jine hodnoty
nez stringy? Nemohou se tam dostat odnekud napriklad datumy, atd.?
(vlastni neblaha zkusenost :-))
3/ Vas priklad je dozajista zjednoduseny, ale u druheho selectOneMenu
vam chybi atribut value, tj. jak zjistujete vybranou hodnotu?
4/ Zkuste vypisovat chybova hlaseni pro kazdy prvek pomoci <h:message
for="select2" />, nekdy to pomuze lokalizovat zdroj chyby lepe.
Neslo by to cele vyresit elegantneji pomoci jednoho selectOneMenu, ktere
by obsahovalo SelectItemGroup ("ovoce", "zelenina", "napoje"), a kazda
tato SelectItemGroup by pak mela jednotlive polozky ("pivo", "limo",
"kava")?
Mirek
Holoubek, Vaclav (EOT) napsal(a):
Dobry den,
Snažím se pomoci JSF naplnit vice listboxu, které se budou vzajemne ovlivnovat.
Delam to na Websphere 6.0.
Nechova se mi to ale korektne a při zmene prvniho listboxu to hlasi tuto chybu
(ale ne vzdy) :
00000050 jsf E com.sun.faces.context.FacesContextImpl addMessage
Adding Message[sourceId=_id0:select2,summary=Validation Error: Value is not
valid)
Nevite co delam spatne ????
zde je ukazka
JSF stranka:
<f:view>
<BODY><h:form>
<h:selectOneMenu id="select1"
onchange="submit()"
value="#{managedBean.druh}">
<f:selectItems value="#{managedBean.seznamDruhu}"/>
</h:selectOneMenu>
<BR>
-------------------------------------
<BR>
<h:selectOneMenu id="select2">
<f:selectItems value="#{managedBean.seznamZbozi}"/>
</h:selectOneMenu>
<BR>
<BR>
<h:commandButton type="submit"
value="Submit"
action="#{managedBean.vystup}">
</h:commandButton>
</h:form>
</BODY>
</f:view>
ManagedBean:
public class ManagedBean
{
private String aktDruh = "";
private SelectItem[] druhy =
{ new SelectItem("Napoje"),
new SelectItem("Ovoce"),
new SelectItem("Zelenina")};
private SelectItem[] napoje =
{ new SelectItem("Limo"),
new SelectItem("Pivo"),
new SelectItem("Kava")};
private SelectItem[] ovoce =
{ new SelectItem("Jablko"),
new SelectItem("Hruska"),
new SelectItem("Svestka")};
private SelectItem[] zelenina =
{ new SelectItem("Mrkev"),
new SelectItem("Celer"),
new SelectItem("Petrzel")};
public SelectItem[] getSeznamDruhu() {
return(druhy);
}
public SelectItem[] getSeznamZbozi() {
if(aktDruh.equals("Napoje"))
return(napoje);
if(aktDruh.equals("Ovoce"))
return(ovoce);
if(aktDruh.equals("Zelenina"))
return(zelenina);
else return(zelenina);
}
public String getDruh() { return(aktDruh); }
public void setDruh(String zbozi) {
this.aktDruh = zbozi;
}
public String vystup() {
return("vystup");
}
}