Ciao,
ho un problema, sto cercando di utilizare un valuechangelistener su una lista di valori (banalmente true e false) ma non funziona se cambio il valore ricarica la pagina senza cambiare la seconda lista. Lo stesso codice utilizzato pero' con una checkbox funziona normalmente.
Il comportamento è il seguente: se la checkbox e selezionata (oppure come in questo caso la listbox e su true) camba i valori contenuti nella seconda lista.
Dov'e' che sbaglio?
codice:
file .jsf
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<head><title>jsf 2</title></head>
<body>
<f:view>
<h:form id="form2">
<h:selectOneMenu valueChangeListener="#{ResumeBean.changeColorMode}"
onclick="submit()"
immediate="true" validator="#{ResumeBean.isUsingColorNames}">
<f:selectItem itemLabel="Colore esadecimale" itemValue="false" itemDescription="Visualizza i colori in formato esadecimale"/>
<f:selectItem itemLabel="Colore Letterale" itemValue="true" itemDescription="Visualizza i colori in formato uamno"/>
</h:selectOneMenu>
<h:selectOneMenu>
<f:selectItems value="#{ResumeBean.availableColors}"/>
</h:selectOneMenu>
</h:form>
</f:view>
</body>
</html>
codice:
Bean
package ctrl;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
public class ResumeBean {
private SelectItem[] availableColorNames = {new SelectItem("BLACK"),
new SelectItem("WHITE"), new SelectItem("SILVER"),
new SelectItem("RED"), new SelectItem("GREEN"),
new SelectItem("BLUE")};
private SelectItem[] availableColorValues = {new SelectItem("#000000"),
new SelectItem("#FFFFFF"), new SelectItem("#C0C0C0"),
new SelectItem("#FF0000"), new SelectItem("#00FF00"),
new SelectItem("#0000FF")};
private boolean isUsingColorNames = true;
public SelectItem[] getAvailableColors() {
if (isUsingColorNames) {
return (availableColorNames);
} else {
return (availableColorValues);
}
}
public SelectItem[] getAvailableColorNames() {
return availableColorNames;
}
public void setAvailableColorNames(SelectItem[] availableColorNames) {
this.availableColorNames = availableColorNames;
}
public SelectItem[] getAvailableColorValues() {
return availableColorValues;
}
public void setAvailableColorValues(SelectItem[] availableColorValues) {
this.availableColorValues = availableColorValues;
}
public boolean isUsingColorNames() {
return isUsingColorNames;
}
public void setUsingColorNames(boolean usingColorNames) {
isUsingColorNames = usingColorNames;
}
public void changeColorMode(ValueChangeEvent event) {
boolean flag = Boolean.getBoolean((String) event.getNewValue());
setUsingColorNames(!flag);
}
}
Dove sta l'errore?
grazie