<a:support> with <s:selectItems> problem
jquery Sep 20, 2007 5:42 AMHi,
what I am trying to do is to change the set of values in one <s:selectItems> component after changing the value on a facelets page in another <s:selectItems>. In other words speaking lets assume that we have two <s:selectItems> components. In the first one there are branches and in the second one there are categories. And now if I change the branch the categories in the new selected branch should be loaded into the second <s:selectItems> . The code is following:
<h:form id="predefinedSkill" styleClass="edit"> <h:outputLabel for="branch"> #{messages.branch} </h:outputLabel> <s:decorate id="branchDecoration"> <h:selectOneMenu value="#{branchHome.instance.name}"> <s:selectItems value="#{branchList.resultList}" var="branch" label="#{branch.name}" /> <s:convertEntity/> <a:support event="onchange" reRender="categoryDecoration" ajaxSingle="true" action="#{categoryHome.loadAllCategories()}"/> </h:selectOneMenu> </s:decorate> <h:outputLabel for="category"> #{messages.category} </h:outputLabel> <s:decorate id="categoryDecoration"> <h:selectOneMenu value="#{categoryHome.instance.name}" > <s:selectItems value="#{categoryHome.categoryList}" var="category" label="#{category.name}" /> <s:convertEntity/> </h:selectOneMenu> </s:decorate> </h:form>
But when I change the branch I get the error:
INFO [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. sourceId=predefinedSkill:branchDecoration:j_id29[severity=(ERROR 2), summary=(/specialist/spec_skills.xhtml @76,85 value="#{branchHome.instance.name}": java.lang.IllegalArgumentException: argument type mismatch), detail=(/specialist/spec_skills.xhtml @76,85 value="#{branchHome.instance.name}": java.lang.IllegalArgumentException: argument type mismatch)]
If the Branch Entity has additionally constraints on length i.e.
@Column(name = "NAME", length = 100) @Length(max = 100) public String getName() { return this.name; }
I get the following error:
INFO [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. sourceId=predefinedSkill:branchDecoration:j_id28[severity=(ERROR 2), summary=(length must be between 0 and 100), detail=(length must be between 0 and 100)] sourceId=predefinedSkill:predefinedSkillDecoration:j_id37[severity=(ERROR 2), summary=(length must be between 0 and 100), detail=(length must be between 0 and 100)]
In both cases the method categoryHome.loadAllCategories() [I don't use branchId as a parameter in this method for the simplicity reason] is not invoked! But if I invoke it from the simple <h:input> component:
<h:form id="predefinedSkill" styleClass="edit"> <h:inputText value="TEST"> <a:support event="onchange" reRender="categoryDecoration" ajaxSingle="true" action="#{categoryHome.loadAllCategories()}"/> </h:inputText> <h:outputLabel for="branch"> #{messages.branch} </h:outputLabel> <s:decorate id="branchDecoration"> <h:selectOneMenu value="#{branchHome.instance.name}"> <s:selectItems value="#{branchList.resultList}" var="branch" label="#{branch.name}" /> <s:convertEntity/> <a:support event="onchange" reRender="categoryDecoration" ajaxSingle="true" action="#{categoryHome.loadAllCategories()}"/> </h:selectOneMenu> </s:decorate> <h:outputLabel for="category"> #{messages.category} </h:outputLabel> <s:decorate id="categoryDecoration"> <h:selectOneMenu value="#{categoryHome.instance.name}" > <s:selectItems value="#{categoryHome.categoryList}" var="category" label="#{category.name}" /> <s:convertEntity/> </h:selectOneMenu> </s:decorate> </h:form>
everything works fine. Could anybody explain me why there is such a problem with <s:selectItems> and what are possible solutions for that.
Thanks for help in advance.
(I use Seam 2 CR1 + JBoss AS 4.2.0)
Best regards,
jquery