Hi Mike,
that was the reason that caused the problem. Now the applicattion renders
another error when i executed.
javax.servlet.ServletException: Argument Error: An option for component
j_id_jsp_1961308526_35 was not an instance of javax.faces.model.SelectItem.
Type found: java.util.ArrayList.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
causa raíz
java.lang.IllegalArgumentException: Argument Error: An option for component
j_id_jsp_1961308526_35 was not an instance of javax.faces.model.SelectItem.
Type found: java.util.ArrayList.
com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:306)
com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:814)
com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:280)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:266)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:197)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
This is my resource file
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<application>
<resource-bundle>
<base-name>jsf.properties.Application</base-name>
<var>label</var>
</resource-bundle>
</application>
<managed-bean>
<managed-bean-name>groups</managed-bean-name>
<managed-bean-class>java.util.ArrayList</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<list-entries>
<value>#{groupA}</value>
</list-entries>
</managed-bean>
<managed-bean>
<managed-bean-name>groupA</managed-bean-name>
<managed-bean-class>javax.faces.model.SelectItem</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>label</property-name>
<value>1-Brazil</value>
</managed-property>
<managed-property>
<property-name>value</property-name>
<value>Brazil</value>
</managed-property>
<managed-property>
<property-name>label</property-name>
<value>2-Spain</value>
</managed-property>
<managed-property>
<property-name>value</property-name>
<value>Spain</value>
</managed-property>
<managed-property>
<property-name>label</property-name>
<value>3-Korea</value>
</managed-property>
<managed-property>
<property-name>value</property-name>
<value>Korea</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>login</managed-bean-name>
<managed-bean-class>jsf.beans.LoginBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>minimum</property-name>
<value>18</value>
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>loginSuccess</from-outcome>
<to-view-id>/success.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/success.jsp</from-view-id>
<navigation-case>
<from-outcome>home</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>populate</from-outcome>
<to-view-id>/bookStore.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
This is the snippet JSP code:
<h:selectManyMenu value="#{login.teams}">
<f:selectItems value="#{groups}"/>
</h:selectManyMenu>
And finally this is my bean class:
package jsf.beans;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.convert.DateTimeConverter;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;
import javax.faces.model.SelectItem;
public class LoginBean {
private String userName;
private String passwd;
private Integer age=null;
private String text;
private int minimum;
private boolean check;
private String language;
private ArrayList<BookBean> bookList=new ArrayList<BookBean>();
private String style;
private ArrayList<String> role;
private ArrayList<String> menuList;
private ArrayList<Select> groupsWorldCup=new ArrayList<Select>();
private ArrayList<String> teams=new ArrayList<String>();
private Date dateLogin=new Date();
private Locale brazilLocal=new Locale("pt","BR");
private BuyActionListener buttonListener=new BuyActionListener();
public BuyActionListener getButtonListener() {
return buttonListener;
}
public void setButtonListener(BuyActionListener buttonListener) {
this.buttonListener = buttonListener;
}
public Locale getBrazilLocal() {
return brazilLocal;
}
public void setBrazilLocal(Locale brazilLocal) {
this.brazilLocal = brazilLocal;
}
public ArrayList<String> getTeams() {
return teams;
}
public void setTeams(ArrayList<String> teams) {
this.teams = teams;
}
public LoginBean(){
this.groupsWorldCup.add(new Select("Brazil","1-Brazil"));
this.groupsWorldCup.add(new Select("Korea","2-Korea"));
this.groupsWorldCup.add(new Select("Portugal","3-Portugal"));
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public int getMinimum() {
return minimum;
}
public void setMinimum(int minimum) {
this.minimum = minimum;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public ArrayList<BookBean> getBookList() {
return bookList;
}
public void setBookList(ArrayList<BookBean> bookList) {
this.bookList = bookList;
}
public boolean isCheck() {
return check;
}
public void setCheck(boolean check) {
this.check = check;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getStyle() {
return style;
}
public void setStyle(String style) {
this.style = style;
}
public ArrayList<String> getRole() {
return role;
}
public void setRole(ArrayList<String> role) {
this.role = role;
}
public ArrayList<String> getMenuList() {
return menuList;
}
public void setMenuList(ArrayList<String> menuList) {
this.menuList = menuList;
}
public ArrayList<Select> getGroupsWorldCup() {
return groupsWorldCup;
}
public void setGroupsWorldCup(ArrayList<Select> groupsWorldCup) {
this.groupsWorldCup = groupsWorldCup;
}
public Date getDateLogin() {
return dateLogin;
}
public void setDateLogin(Date dateLogin) {
this.dateLogin = dateLogin;
}
public void checkUsername(FacesContext fcontext,UIComponent
component,Object value){
String msg=(String)value;
if(!msg.equals("raul")){
((UIInput)component).setValid(false);
fcontext.addMessage(component.getClientId(fcontext), new
FacesMessage("Usuario incorrecto"));
}
}
public void checkPasswd(FacesContext fcontext,UIComponent
component,Object
value){
if(!value.equals("vaji97")){
((UIInput)component).setValid(false);
fcontext.addMessage(component.getClientId(fcontext), new
FacesMessage("Clave incorrecta"));
}
}
public String populateBookList(){
this.bookList.add(new BookBean(2,"Lord of the Rings",34));
this.bookList.add(new BookBean(3,"Codigo DVinci",38));
this.bookList.add(new BookBean(1,"Angels and Evils",36));
this.bookList.add(new BookBean(4,"Geisha history",27));
return "populate";
}
public void changeValue(ValueChangeEvent evt){
System.out.println("Valor nuevo:" +evt.getNewValue());
System.out.println("Valor viejo:" +evt.getOldValue());
}
public void buyAction(ActionEvent evt){
System.out.println("Comprado el libro");
}
}
Its a bit strange this error because according with my resource file the
application should instanciate an SelectItem array List in the value
attribute selectItems tag.
Thanks.
Regards:Raul.
Mike Kienenberger wrote:
>
> I think the problem is that your Select class is not populating the
> label and value instance variables, leading to a NullPointerException.
>
> I don't remember if there's a way to specify values for the
> constructor from managed beans -- I don't do a lot with managed beans
> in my JSF projects.
>
> The spec says that the bean has to have a zero-args public
> constructor. Your Select item does not.
>
> It does look like Jsf 1.2 allows you to set the label and the value
> separately after the zero-arg constructor is called.
>
> It does seem a bit odd that you're defining team1/team2 values on the
> Select class but aren't doing anything with them.
>
> Maybe you want to do it like this:
>
> <managed-bean>
> <managed-bean-name>groups</managed-bean-name>
> <managed-bean-class>java.util.ArrayList</managed-bean-class>
> <managed-bean-scope>session</managed-bean-scope>
> <list-entries>
> <value-class>jsf.beans.Select</value-class>
> <value>#{groupA}</value>
> <value>#{groupB}</value>
> </list-entries>
> </managed-bean>
>
> [...]
>
> <managed-bean-name>groupA</managed-bean-name>
> <managed-bean-class>jsf.beans.Select</managed-bean-class>
> <managed-bean-scope>session</managed-bean-scope>
> <managed-property>
> <property-name>label</property-name>
> <value>Brazil</value>
> </managed-property>
> <managed-property>
> <property-name>value</property-name>
> <value>Brazil</value>
> </managed-property>
> </managed-bean>
>
> <managed-bean-name>groupB</managed-bean-name>
> <managed-bean-class>jsf.beans.Select</managed-bean-class>
> <managed-bean-scope>session</managed-bean-scope>
> <managed-property>
> <property-name>label</property-name>
> <value>Korea</value>
> </managed-property>
> <managed-property>
> <property-name>value</property-name>
> <value>Korea</value>
> </managed-property>
> </managed-bean>
>
> I suspect what you're trying to do is create one SelectItem for each
> team, but it's really hard to know for certain.
>
> I normally populate selectItems lists using a method on a bean...
>
> <f:selectItems value="#{login.groups}"/>
>
> and
>
> public SelectItem[] getGroups() {
>
> }
>
>
> On Thu, Jun 24, 2010 at 5:15 AM, slayer666 <[email protected]> wrote:
>>
>> Hi, sorry but I forgott to post the Select bean class.
>>
>> package jsf.beans;
>>
>> import javax.faces.model.SelectItem;
>>
>> public class Select extends SelectItem {
>> private String team1;
>> private String team2;
>> private String team3;
>>
>> public Select(String v,String l){
>> super(v,l);
>> }
>>
>> public String getTeam1() {
>> return team1;
>> }
>> public void setTeam1(String team1) {
>> this.team1 = team1;
>> }
>> public String getTeam2() {
>> return team2;
>> }
>> public void setTeam2(String team2) {
>> this.team2 = team2;
>> }
>> public String getTeam3() {
>> return team3;
>> }
>> public void setTeam3(String team3) {
>> this.team3 = team3;
>> }
>>
>>
>>
>> }
>>
>> As you can see this class extends from SelectItem class so theoretically
>> i
>> have implemented a List of SelectedItems.
>>
>> Thanks.
>>
>>
>> Mike Kienenberger wrote:
>>>
>>> That's a new way (to me) to initialize a selectItems list.
>>>
>>> Are you certain that your "groups" beans are SelectItem instances?
>>>
>>> On Tue, Jun 22, 2010 at 6:51 AM, slayer666 <[email protected]> wrote:
>>>>
>>>> Good morning, i am trying the JSF selectManyMenu tag and i when i
>>>> execute
>>>> the
>>>> aplication renders this trace log:
>>>>
>>>> javax.servlet.ServletException
>>>> javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
>>>>
>>>>
>>>> causa raíz
>>>>
>>>> java.lang.NullPointerException
>>>>
>>>> org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:171)
>>>>
>>>> com.sun.faces.application.ViewHandlerImpl$WriteBehindStateWriter.write(ViewHandlerImpl.java:867)
>>>>
>>>> com.sun.faces.renderkit.html_basic.HtmlResponseWriter.write(HtmlResponseWriter.java:620)
>>>>
>>>> com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:539)
>>>>
>>>> com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:772)
>>>>
>>>> com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:832)
>>>>
>>>> com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:280)
>>>>
>>>> javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
>>>>
>>>> javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
>>>> javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
>>>>
>>>> javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
>>>>
>>>> javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
>>>>
>>>> javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
>>>>
>>>> com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:266)
>>>>
>>>> com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:197)
>>>>
>>>> com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
>>>> com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
>>>>
>>>> com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
>>>> javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
>>>>
>>>> This are the codes implemented:
>>>>
>>>> *faces-config.xml
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>
>>>> <faces-config
>>>> xmlns="http://java.sun.com/xml/ns/javaee"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
>>>> http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
>>>> version="1.2">
>>>>
>>>> <application>
>>>> <resource-bundle>
>>>> <base-name>jsf.properties.Application</base-name>
>>>> <var>label</var>
>>>> </resource-bundle>
>>>> </application>
>>>> <managed-bean>
>>>> <managed-bean-name>groups</managed-bean-name>
>>>> <managed-bean-class>java.util.ArrayList</managed-bean-class>
>>>> <managed-bean-scope>session</managed-bean-scope>
>>>> <list-entries>
>>>> <value-class>jsf.beans.Select</value-class>
>>>> <value>#{groupA}</value>
>>>> </list-entries>
>>>> </managed-bean>
>>>> <managed-bean>
>>>> <managed-bean-name>groupA</managed-bean-name>
>>>> <managed-bean-class>jsf.beans.Select</managed-bean-class>
>>>> <managed-bean-scope>session</managed-bean-scope>
>>>> <managed-property>
>>>> <property-name>team1</property-name>
>>>> <value>Brazil</value>
>>>> </managed-property>
>>>> <managed-property>
>>>> <property-name>team2</property-name>
>>>> <value>Korea</value>
>>>> </managed-property>
>>>> <managed-property>
>>>> <property-name>team3</property-name>
>>>> <value>Portugal</value>
>>>> </managed-property>
>>>> </managed-bean>
>>>> <managed-bean>
>>>> <managed-bean-name>login</managed-bean-name>
>>>> <managed-bean-class>jsf.beans.LoginBean</managed-bean-class>
>>>> <managed-bean-scope>request</managed-bean-scope>
>>>> <managed-property>
>>>> <property-name>minimum</property-name>
>>>> <value>18</value>
>>>> </managed-property>
>>>> </managed-bean>
>>>> <navigation-rule>
>>>> <from-view-id>/index.jsp</from-view-id>
>>>> <navigation-case>
>>>> <from-outcome>loginSuccess</from-outcome>
>>>> <to-view-id>/success.jsp</to-view-id>
>>>> </navigation-case>
>>>> </navigation-rule>
>>>> <navigation-rule>
>>>> <from-view-id>/success.jsp</from-view-id>
>>>> <navigation-case>
>>>> <from-outcome>home</from-outcome>
>>>> <to-view-id>/index.jsp</to-view-id>
>>>> </navigation-case>
>>>> <navigation-case>
>>>> <from-outcome>populate</from-outcome>
>>>> <to-view-id>/bookStore.jsp</to-view-id>
>>>> </navigation-case>
>>>> </navigation-rule>
>>>> </faces-config>
>>>>
>>>> *login.jsp
>>>>
>>>> <h:selectManyMenu value="#{login.groupsWorldCup}">
>>>> <f:selectItems value="#{groups}"/>
>>>> </h:selectManyMenu>
>>>>
>>>> *LoginBean.java
>>>>
>>>> package jsf.beans;
>>>>
>>>> import java.util.ArrayList;
>>>>
>>>> import javax.faces.application.FacesMessage;
>>>> import javax.faces.component.UIComponent;
>>>> import javax.faces.component.UIInput;
>>>> import javax.faces.context.FacesContext;
>>>>
>>>> public class LoginBean {
>>>> private String userName;
>>>> private String passwd;
>>>> private Integer age=null;
>>>> private String text;
>>>> private int minimum;
>>>> private boolean check;
>>>> private String language;
>>>> private ArrayList<BookBean> bookList=new ArrayList<BookBean>();
>>>> private String style;
>>>> private ArrayList<String> role=new ArrayList<String>();
>>>> private ArrayList<String> menuList=new ArrayList<String>();
>>>> private ArrayList<String> groupsWorldCup=new
>>>> ArrayList<String>();
>>>>
>>>> public String getUserName() {
>>>> return userName;
>>>> }
>>>>
>>>> public void setUserName(String userName) {
>>>> this.userName = userName;
>>>> }
>>>>
>>>> public String getPasswd() {
>>>> return passwd;
>>>> }
>>>>
>>>> public void setPasswd(String passwd) {
>>>> this.passwd = passwd;
>>>> }
>>>>
>>>> public Integer getAge() {
>>>> return age;
>>>> }
>>>>
>>>> public void setAge(Integer age) {
>>>> this.age = age;
>>>> }
>>>>
>>>> public int getMinimum() {
>>>> return minimum;
>>>> }
>>>>
>>>> public void setMinimum(int minimum) {
>>>> this.minimum = minimum;
>>>> }
>>>>
>>>> public String getText() {
>>>> return text;
>>>> }
>>>>
>>>> public void setText(String text) {
>>>> this.text = text;
>>>> }
>>>>
>>>> public ArrayList<BookBean> getBookList() {
>>>> return bookList;
>>>> }
>>>>
>>>> public void setBookList(ArrayList<BookBean> bookList) {
>>>> this.bookList = bookList;
>>>> }
>>>>
>>>> public boolean isCheck() {
>>>> return check;
>>>> }
>>>>
>>>> public void setCheck(boolean check) {
>>>> this.check = check;
>>>> }
>>>>
>>>> public String getLanguage() {
>>>> return language;
>>>> }
>>>>
>>>> public void setLanguage(String language) {
>>>> this.language = language;
>>>> }
>>>>
>>>> public String getStyle() {
>>>> return style;
>>>> }
>>>>
>>>> public void setStyle(String style) {
>>>> this.style = style;
>>>> }
>>>>
>>>> public ArrayList<String> getRole() {
>>>> return role;
>>>> }
>>>>
>>>> public void setRole(ArrayList<String> role) {
>>>> this.role = role;
>>>> }
>>>>
>>>> public ArrayList<String> getMenuList() {
>>>> return menuList;
>>>> }
>>>>
>>>> public void setMenuList(ArrayList<String> menuList) {
>>>> this.menuList = menuList;
>>>> }
>>>>
>>>> public ArrayList<String> getGroupsWorldCup() {
>>>> return groupsWorldCup;
>>>> }
>>>>
>>>> public void setGroupsWorldCup(ArrayList<String> groupsWorldCup)
>>>> {
>>>> this.groupsWorldCup = groupsWorldCup;
>>>> }
>>>>
>>>> public void checkUsername(FacesContext fcontext,UIComponent
>>>> component,Object value){
>>>> String msg=(String)value;
>>>> if(!msg.equals("raul")){
>>>> ((UIInput)component).setValid(false);
>>>>
>>>> fcontext.addMessage(component.getClientId(fcontext),
>>>> new FacesMessage("Usuario incorrecto"));
>>>> }
>>>> }
>>>>
>>>> public void checkPasswd(FacesContext fcontext,UIComponent
>>>> component,Object value){
>>>> if(!value.equals("vaji97")){
>>>> ((UIInput)component).setValid(false);
>>>>
>>>> fcontext.addMessage(component.getClientId(fcontext),
>>>> new FacesMessage("Clave incorrecta"));
>>>> }
>>>> }
>>>>
>>>> public String populateBookList(){
>>>> this.bookList.add(new BookBean(2,"Lord of the
>>>> Rings",34));
>>>> this.bookList.add(new BookBean(3,"Codigo DVinci",38));
>>>> this.bookList.add(new BookBean(1,"Angels and
>>>> Evils",36));
>>>> this.bookList.add(new BookBean(4,"Geisha history",27));
>>>> return "populate";
>>>> }
>>>> }
>>>>
>>>>
>>>> Any suggestions?.
>>>>
>>>> Thanks in advanced.
>>>> --
>>>> View this message in context:
>>>> http://old.nabble.com/JSF-selectMany-Tag-problem-tp28958641p28958641.html
>>>> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://old.nabble.com/JSF-selectMany-Tag-problem-tp28958641p28980436.html
>> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>>
>>
>
>
--
View this message in context:
http://old.nabble.com/JSF-selectMany-Tag-problem-tp28958641p28991899.html
Sent from the MyFaces - Users mailing list archive at Nabble.com.