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.
>
>