How to select one item and immediately fullfill the form with item data?
elenaveretilo Jun 16, 2010 2:10 PMHi all!
I need your brilliant minds agian. Can I select one item with <h:selectOneMenu> (or any other selectors) , and after that use this item in the form?
More explanation: I want to select the item in selectoneitem, and after that I get immidiately full filling the form with item ( in my case user ) data. Can I do it? If yes - how?
My code:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:fc="http://www.fusioncharts.com" xmlns:t="http://myfaces.apache.org/tomahawk" template="template.xhtml"> <ui:define name="title">Save user page</ui:define> <ui:define name="content"> <h:selectOneMenu value="#{saveUserBean.user}" style="width: 200px;"> <f:selectItems value="#{saveUserBean.companyUsers}"/> </h:selectOneMenu> <br/><br/><br/> <h:form id="saveUserForm"> <h:outputText value="Add or update user"/><br/><br/><br/> <div style="width: 300px;"> <table width="100%" cellpadding="5" cellspacing="5"> <tr> <td> <h:selectOneMenu value="#{saveUserBean.user}" style="width: 200px;"> <f:selectItems value="#{saveUserBean.companyUsers}"/> </h:selectOneMenu> </td> </tr> <tr> <td width="1"> User name: </td> <td> <h:inputText id="userName" value="#{saveUserBean.user.name}" style="width: 100%;" required="true" /> </td> </tr> <tr> <td valign="top" nowrap="nowrap"> User password: </td> <td> <h:inputSecret value="#{saveUserBean.password}" style="width: 100%;" required="true" /> </td> </tr> <tr> <td nowrap="nowrap"> User role: </td> <td> <h:selectOneMenu value="#{saveUserBean.role}" style="width: 200px;"> <f:selectItems value="#{saveUserBean.roles}"/> </h:selectOneMenu> </td> </tr> </table><br/> <center> <h:commandButton value="Save user" action="#{saveUserBean.saveUser}" style="width: 40%;"/> <a4j:commandButton ajaxSingle="true" value="Clear" actionListener="#{saveUserBean.clear}" style="width: 40%;" reRender="saveUserForm"/> </center> </div> </h:form> </ui:define> </ui:composition>
package no.sfront.saveuser; import java.util.List; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.model.SelectItem; import no.sfront.login.SessionBean; import no.sfront.torque.generated.User; /** * @author Elena Veretilo * */ public class SaveUserBean { private String username; private String password; private int role; private User user; private List<SelectItem> roles; private List<SelectItem> companyUsers; // Constructor public SaveUserBean() { SaveUserUtils saveUserUtils = SaveUserUtils.getInstance(); companyUsers = saveUserUtils.createCompanyUsersList(); roles = saveUserUtils.createRolesList(); } public static SaveUserBean getInstance() { FacesContext facesContext = FacesContext.getCurrentInstance(); return (SaveUserBean) facesContext.getApplication() .getELResolver().getValue(facesContext.getELContext(), null, "saveUserBean"); } public String saveUser() { this.createUser(); return "main"; } private String createUser() { FacesContext context = FacesContext.getCurrentInstance(); String username = this.getUsername().trim(); boolean userExists = SaveUserUtils.getInstance().userExists(username); if (userExists) { FacesMessage message = new FacesMessage("User with such name already exists. Please select another name."); context.addMessage(null, message); } else { String password = this.getPassword().trim(); int role = this.getRole(); // TODO get companyId from session as attribute int companyId = 1; // SessionBean.getInstance().getCompanyId(); // may return created user and then we add it to companyUsers!!!!!!!!!!!11 User user = SaveUserUtils.getInstance().createAndInsertUser(username, password, role, companyId); SelectItem item = new SelectItem(); item.setValue(user.getId()); item.setLabel(user.getName()); this.companyUsers.add(item); } return null; } private String updateUser() { return null; } public void clear(ActionEvent event) { this.setUsername(""); this.setPassword(""); this.setRole(-1); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getRole() { return role; } public void setRole(int role) { this.role = role; } public List<SelectItem> getRoles() { return roles; } public void setRoles(List<SelectItem> roles) { this.roles = roles; } public List<SelectItem> getCompanyUsers() { return companyUsers; } public void setCompanyUsers(List<SelectItem> companyUsers) { this.companyUsers = companyUsers; } public User getUser() { System.out.println("get user = " + (user == null)); return user; } public void setUser(User user) { System.out.println("set user = " + (user == null)); this.user = user; } }
Maybe I need first convert the selectedItem to user class? Or maybe something else?
Please help!
With best wishes!