1

In my .xhtml file, I have the following SelectOneMenu component:

<ui:define name="formContent"> <h:selectOneMenu value="#{mrBean.itemCategoryID}"> <f:ajax render="abc def" execute="@this" listener="#{mrBean.getListOfItems}"></f:ajax> <f:selectItem itemLabel="Choose one .." itemValue="0" noSelectionOption="true" /> <f:selectItems value="#{mrBean.itemCategories}" var="ic" itemLabel="#{ic.name}" itemValue="#{ic.id}" /> </h:selectOneMenu> <h:panelGrid id="abc" columns="3" border="1"> <h:outputText style="font-weight: bold" value="Name"/> <h:outputText style="font-weight: bold" value="Producer" /> <h:outputText /> </h:panelGrid> <h:panelGroup id="def" > <ui:repeat value="#{mrBean.items}" var="i"> <h:form id="BuyItemForm"> <h:panelGrid columns="3" border="1"> <h:outputText style="font-weight: normal" value="#{i.name}" /> <h:outputText style="font-weight: normal" value="#{i.producer.name}" /> <h:commandButton value="Buy" actionListener="#{mrBean.buyItem}" > <f:param name="itemID" value="#{i.id}" /> </h:commandButton> </h:panelGrid> </h:form> </ui:repeat> </h:panelGroup> </ui:define> 

When I open the page, it can load normally with the menu populated properly. However, when I choose 1 of the option, I ran into the following error:

SEVERE: javax.faces.component.UpdateModelException: javax.el.ELException: /partner/BuyItem.xhtml @53,81 value="#{mrBean.itemCategoryID}": Can't set property 'itemCategoryID' on class 'managedBean.MrBean' to value 'null'. ... Caused by: javax.el.ELException: /partner/BuyItem.xhtml @53,81 value="#{mrBean.itemCategoryID}": Can't set property 'itemCategoryID' on class 'managedBean.MrBean' to value 'null'. at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:139) at javax.faces.component.UIInput.updateModel(UIInput.java:818) ... 47 more Caused by: java.lang.IllegalArgumentException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.el.BeanELResolver.setValue(BeanELResolver.java:381) at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255) at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281) at com.sun.el.parser.AstValue.setValue(AstValue.java:197) at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:286) at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131) ... 48 more 

EDIT: this is my bean with getListOfItems function:

@ManagedBean @ViewScoped public class MrBean { @EJB private PartnerBeanLocal partnerBean; @ManagedProperty(value="0") private long itemCategoryID; private List<ItemState> items; ... public void getListOfItems() { try { System.out.println(itemCategoryID); // I never saw this line printed out ArrayList data = partnerBean.getInfo(Constants.GET_LIST_OF_ITEMS, itemCategoryID); int result = ((Integer) data.get(0)).intValue(); if (result == Constants.STATUS_SUCCESSFUL) items = (List<ItemState>) data.get(1); else if (result == Constants.STATUS_NOT_FOUND) FacesContext.getCurrentInstance().getExternalContext().redirect("HomePage.xhtml"); } catch (IOException ex) { Logger.getLogger(MrBean.class.getName()).log(Level.SEVERE, null, ex); } } ... // Getters and Setters ... public long getItemCategoryID() { return itemCategoryID; } public void setItemCategoryID(long itemCategoryID) { this.itemCategoryID = itemCategoryID; } public List<ItemState> getItems() { return items; } public List<ItemState> setItems(List<ItemState> items) { this.items = items; } ... } 

I'd be very grateful if someone could give me an advice on how to tackle this problem.

EDIT 2: Thanks everyone for helping me! The problem was that I stupidly forgot to put the <f:ajax> tag inside a <h:form> tag.

10
  • Would help to have the code from the mrBean too... Commented Oct 26, 2011 at 13:35
  • Looks like somehow null is being passed and java.lang.IllegalArgumentException is thrown while trying to update model value. Can you post your managed-bean code? Commented Oct 26, 2011 at 13:37
  • From what I saw, when I choose an option, an Ajax call was made. However, my bean function getListOfItems was never fired. Commented Oct 26, 2011 at 13:38
  • When you choose (combobox open and populated)? or when you click on the combobox ??? Commented Oct 26, 2011 at 13:42
  • Is itemCategoryID of type int or Integer? Commented Oct 26, 2011 at 13:43

4 Answers 4

1

Here is what I tried:

@ManagedBean @ViewScoped public class MrBean implements Serializable { @ManagedProperty(value="0") private long itemCategoryID; private List<ItemCategory> itemCategories; @PostConstruct public void init() { this.itemCategories = new ArrayList<ItemCategory>(); this.itemCategories.add(new ItemCategory("Item1", 1)); this.itemCategories.add(new ItemCategory("Item2", 2)); this.itemCategories.add(new ItemCategory("Item3", 3)); } public void getListOfItems() { System.out.println(Thread.currentThread().getStackTrace()[1]); System.out.println("itemCategoryID: " + this.itemCategoryID); } public List<ItemCategory> getItemCategories() { return itemCategories; } public void setItemCategories(List<ItemCategory> itemCategories) { this.itemCategories = itemCategories; } public long getItemCategoryID() { return itemCategoryID; } public void setItemCategoryID(long itemCategoryID) { this.itemCategoryID = itemCategoryID; } } 

with:

<h:form> <h:selectOneMenu value="#{mrBean.itemCategoryID}"> <f:ajax execute="@this" listener="#{mrBean.getListOfItems}"></f:ajax> <f:selectItem itemLabel="Choose one .." itemValue="0" noSelectionOption="true" /> <f:selectItems value="#{mrBean.itemCategories}" var="ic" itemLabel="#{ic.name}" itemValue="#{ic.id}" /> </h:selectOneMenu> </h:form> 

And it works without any problem.

Might be the version of JSF (EL) you have, or you have problem somewhere else.

Sign up to request clarification or add additional context in comments.

Comments

1

The <f:ajax> tag need to be wrapped inside a <h:form> tag.

Comments

0

Seems like some of your item values are null. If you want to accept null, use Long instead of long.

Comments

0

I had the same issue and it was resolved by changing my variable type boolean to Boolean

1 Comment

You had the same exception you mean… not the same issue ;-)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.