RichFaces Gurus - Critique My Design/Code Please
indyjones Aug 30, 2007 1:59 PMEnvironment
---------------
JBoss - 4.2.0
Java - 1.6.0_02
MySQL
Seam 2.0.0 Beta 1
Process
----------
I want a "New" button on a page to pop up a modalPanel. Within that panel, have the fields needed to create a new User. Hit a "Save" button on the panel, go through the validation on the Entity bean, if the validation fails, use the a4j:outputPanel to display the errors on the modalPanel that should stay open. If the validation succeeds, then create the user in the database and then close the modalPanel.
Code
-------
Page
<ui:composition> <ui:define> <h:form> <a4j:commandButton id="btnNewUser" value="New" oncomplete="javascript:Richfaces.showModalPanel('mplNewUser',{width:450, top:200})"></a4j:commandButton> </h:form> </ui:define> </ui:composition>
modalPanel
<rich:modalPanel id="mplNewUser" minHeight="265" minWidth="475" height="265" width="475" zindex="2000"> <f:facet name="header"> <h:outputText value="Create New User" /> </f:facet> <h:form id="frmNewUser"> <h:panelGrid columns="2" cellpadding="3" width="255" columnClasses="leftlable, left" style="background-color:#F1F1F1"> <h:outputText value="User555 Name" /> <h:inputText required="true" value="#{usermanager.newUser.username}" id="iptNewusername" > <s:validate/> </h:inputText> <h:outputText value="Password" /> <h:inputText required="true" value="#{usermanager.newUser.password}" id="iptNewpassword" > <s:validate/> </h:inputText> </h:panelGrid> <a4j:outputPanel ajaxRendered="true"> <h:messages id="errors" /> </a4j:outputPanel> <br/> <a4j:commandButton id="btnSaveUser" value="Save" actionListener="#{usermanager.saveUser}" oncomplete="javascript:Richfaces.hideModalPanel('mplNewUser')" reRender="errors" ></a4j:commandButton> <h:commandButton id="btnCancelNewUser" type="submit" value="Cancel" action="#{usermanager.cancelNewUser}"></h:commandButton> </h:form> </rich:modalPanel>
Bean
@Name("usermanager") @Stateful @Scope(SESSION) @Restrict("#{identity.loggedIn}") public class UserManager implements UserManagerInterface { @In private User user; @In private Session inetworkDatabase; @Logger Log log; @In FacesMessages facesMessages; private User newUser = new User(); public void setNewUser(User newUser){ this.newUser = newUser; } public User getNewUser(){ return this.newUser; } public void saveUser(ActionEvent event){ try { inetworkDatabase.save(this.newUser); getUsers(); setNewUser(new User()); }catch (Exception e){ } } public void cancelNewUser(){ setNewUser(new User()); } }
PROBLEMS
-----------
1) If the validation fails, the errors are displayed on the a4j:outputPanel, BUT the modalPanel closes anyway. I need that modalPanel to stay open if the validation fails.
2) After going through the process once and a user is created, if the "New" button is clicked again, the modalPanel is pre-populated with the information of the user that was previously created. Basically, the code setNewUser(new User), is not re-setting the newUser object.
I love RichFaces, but I am still a rookie...
Any help would be very appreciated....
Thanks
indy