binding attribute doesnt work with Seam?
mnrz Oct 7, 2007 1:48 AMHi everybody,
I have a SFSB in which I managed creating and editing user profile as follows:
@Stateful
@Name("userRegister")
@Scope(ScopeType.CONVERSATION)
public class UserRegisterAction implements UserRegister {
private Log logger = LogFactory.getLog(UserRegisterAction.class);
private User tempUser;
private HtmlSelectOneMenu selectOneUser;
private SelectItem[] allUsers;
private ArrayList<SelectItem> allRoles;
private SelectItem[] allGroups;
private boolean newUser;
private Long selectedGroup = 0L;
private String selectedUsername = "0";
private boolean reload = false;
private UIInput username;
private UIInput address;
private UIInput contactNo;
private UIInput mobilePhone;
private String verifyPassword;
private String password;
@EJB
private UserDao userDao;
@EJB
private GroupDao groupDao ;
private List<String> selectedRoles;
//rest of the codes...
}
the problem is when I press the "Save" button to apply changes the new values never submit to the server and they will remain intact.
so I think the only way is to bind the items with its corresponding field at server-side but binding doesnt work!!
it throws exception which means this identifier can not resolve
javax.servlet.ServletException: /pages/main/userDifination.xhtml @57,77 binding="#{userRegister.username}": Target Unreachable, identifier 'userRegister' resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:154)
org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:29)
org.jboss.seam.servlet.SeamCharacterEncodingFilter.doFilter(SeamCharacterEncodingFilter.java:41)
root cause
javax.faces.el.PropertyNotFoundException: /pages/main/userDifination.xhtml @57,77 binding="#{userRegister.username}": Target Unreachable, identifier 'userRegister' resolved to null
com.sun.facelets.el.LegacyValueBinding.isReadOnly(LegacyValueBinding.java:84)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:84)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:57)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:94)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:57)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:94)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:57)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:94)
org.apache.myfaces.shared_impl.util.RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(RestoreStateUtils.java:57)
org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:96)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:29)
org.jboss.seam.servlet.SeamCharacterEncodingFilter.doFilter(SeamCharacterEncodingFilter.java:41)
here is a fragment of my xhtml file:
<h:form id="userDifination">
<br/>
<h:panelGroup rendered="true" id="mainPanel">
<!-- validateAll -->
<h:panelGrid rendered="true" align="center" id="mainPanel2"
rowClasses="rowTable1, rowTable2" headerClass="titleTable"
footerClass="footerTable" styleClass="borderTable"
captionClass="titleTable" columns="6" border="0" width="70%">
<f:facet name="header">
<h:outputLabel id="label1"
value="#{bundle['userDifination.header']}" />
</f:facet>
<h:outputLabel id="userL"
value="#{bundle['userDifination.selectUser']}" for="userMenu" />
<t:selectOneMenu id="userMenu" required="false" value="#{userRegister.selectedUsername}"
valueChangeListener="#{userRegister.userListValueChanged}"
onchange="submit(this)" >
<f:selectItem itemLabel="New user..." itemValue="0" />
<f:selectItems id="userList" value="#{userRegister.allUsers}" />
</t:selectOneMenu>
<h:panelGroup rendered="true" id="userPanel2">
</h:panelGroup>
<h:panelGroup rendered="true" id="userPanel3">
</h:panelGroup>
<h:panelGroup rendered="true" id="userPanel4">
</h:panelGroup>
<h:panelGroup rendered="true" id="userPanel5">
</h:panelGroup>
<h:outputLabel id="userUserNameL"
value="#{bundle['userDifination.username']}" rendered="true"
for="userUserNameT" />
<h:inputText id="userUserNameT" styleClass="textBox"
binding="#{userRegister.username}" required="false"
value="#{tempUser.username}" readonly="#{!userRegister.newUser}"/>
<h:panelGroup rendered="true" id="userPanel">
<span class="errors"><h:message for="userUserNameT" />
</span>
</h:panelGroup>
<h:outputLabel id="userPasswordL"
value="#{bundle['userDifination.password']}"
for="userPasswordT" />
<h:inputSecret id="userPasswordT" styleClass="textBox"
value="#{userRegister.password}" />
<h:panelGroup rendered="true" id="passPanel">
<span class="errors"><h:message for="userPasswordT" />
</span>
</h:panelGroup>
<h:outputLabel id="mobileL"
value="#{bundle['userDifination.mobile']}" for="mobileT" />
<h:inputText id="mobileT" styleClass="textBox"
value="#{tempUser.mobileContact}" />
<h:panelGroup rendered="true" id="mobilPanel">
<span class="errors"><h:message for="mobileT" /> </span>
</h:panelGroup>
<h:outputLabel id="userVerifyPasswordL"
value="#{bundle['userDifination.verifyPassword']}"
for="userVerifyPasswordT" />
<t:inputSecret id="userVerifyPasswordT" styleClass="textBox"
value="#{userRegister.verifyPassword}" />
<h:panelGroup rendered="true" id="verifyPanel">
<span class="errors"><h:message
for="userVerifyPasswordT" /> </span>
</h:panelGroup>
<h:outputLabel id="addressL"
value="#{bundle['userDifination.address']}" for="addressT" />
<h:inputText id="addressT" styleClass="textBox"
value="#{tempUser.address}" />
<h:panelGroup rendered="true" id="addressPanel">
<span class="errors"><h:message for="addressT" /> </span>
</h:panelGroup>
<h:outputLabel id="phoneL"
value="#{bundle['userDifination.address']}" for="phoneT" />
<h:inputText id="phoneT" styleClass="textBox"
value="#{tempUser.phoneNo1}" />
<h:panelGroup rendered="true" id="phonePanel">
<span class="errors"><h:message for="phoneT" /> </span>
</h:panelGroup>
<h:outputLabel id="roleL"
value="#{bundle['userDifination.role']}" for="roleMenu" />
<h:selectManyMenu id="roleMenu"
title="#{bundle['userDifination.role']}"
value="#{userRegister.selectedRoles}" >
<f:selectItems value="#{userRegister.allRoles}" />
</h:selectManyMenu>
<h:panelGroup rendered="true" id="permissionPanel">
</h:panelGroup>
<h:outputLabel id="groupL"
value="#{bundle['userDifination.group']}" for="groupMenu" />
<h:selectOneMenu value="#{userRegister.selectedGroup}" id="groupMenu">
<f:selectItems value="#{userRegister.allGroups}" />
</h:selectOneMenu>
<f:facet name="footer">
<h:panelGrid columns="1" styleClass="scrollerTable2"
align="center" width="20%"
columnClasses="standardTable_ColumnCentered">
<h:panelGroup rendered="true" id="buttonPanel">
<input type="reset" name="_id1:_id20:_id38" value="Reset" />
<h:commandButton type="submit" value="Back"
action="#{userRegister.back}" />
<h:commandButton type="submit" value="Save"
action="#{userRegister.save}" />
</h:panelGroup>
</h:panelGrid>
</f:facet>
</h:panelGrid>
<!-- validateAll -->
<div align="center">
<h:messages warnClass="textWarn" infoClass="textInfo"
fatalClass="textFatal" errorClass="textError"
globalOnly="true" />
</div>
</h:panelGroup>
</h:form>
I am using JBoss Seam v1.1.6
is this a Seam issue or I've made a mistake somewhere ?
thank you so much