2010-08-18 14 views
0

J'ai un problème avec l'utilisation du composant assistant de premiereface et du core selectOneRadio. Ma page d'inscription ressemble à ceciAssistant Primefaces et selectOneRadio

<ui:define name="content"> 
      <f:view>    
      <h:form id="signUpForm"> 

       <p:wizard widgetVar="wiz" flowListener="#{SignUpBean.onFlowProcess}"> 
        <p:tab id="personalTab" title=""> 
         <p:panel header="Personal"> 
          <h:messages/> 
          <h:panelGrid id="panel1" columns="2"> 
           <h:outputLabel for="firstName" value="First Name"/> 
           <h:inputText id="firstName" value="#{SignUpBean.firstName}" required="true"/> 
           <h:outputLabel for="lastName" value="Last Name"/> 
           <h:inputText id="lastName" value="#{SignUpBean.lastName}" required="true"/> 
           <h:outputLabel for="email" value="Email"/> 
           <h:inputText id="email" value="#{SignUpBean.email}" required="true"> 
            <f:validator validatorId="emailValidator"/> 
           </h:inputText> 
          </h:panelGrid> 
         </p:panel> 
        </p:tab> 
        <p:tab id="passwordTab" title=""> 
         <p:panel header="Password"> 
          <h:messages/> 
          <h:panelGrid id="panel2" columns="2"> 
            <h:outputLabel for="password" value="Password"/> 
            <h:inputSecret id="password" value="#{SignUpBean.password}" required="true"/> 
            <h:outputLabel for="retypePass" value="Retype Password"/> 
            <h:inputSecret id="retypePass" value="#{SignUpBean.retypePassword}" required="true"/> 
          </h:panelGrid> 
         </p:panel> 
        </p:tab> 
        <p:tab id="groupTab" title=""> 
         <p:panel header="Group"> 
          <h:messages/> 
          <h:panelGrid id="panel3" columns="2"> 
           <h:outputLabel for="radioGroup" value=""/> 
           <h:selectOneRadio id="radioGroup" value="#{SignUpBean.join}"> 
            <f:selectItem itemValue="true" itemLabel="Join existing group"/> 
            <f:selectItem itemValue="false" itemLabel="Create new group"/> 
           </h:selectOneRadio> 
           Group Name 
           <h:inputText id="group" value="#{SignUpBean.group}" required="true"/> 
           Group Password 
           <h:inputSecret id="groupPass" value="#{SignUpBean.groupPass}" required="true"/> 
          </h:panelGrid> 
         </p:panel> 
        </p:tab> 
        <p:tab id="confirmTab" title=""> 
         <p:panel header="Confirm"> 
          <h:messages/> 
          <p:growl id="signUpGrowl" sticky="false" life="1000" showDetail="true" /> 
          <h:panelGrid id="panel4" columns="4" cellpadding="5"> 
           Firstname: 
           <h:outputText value="#{SignUpBean.firstName}"/> 
           Lastname: 
           <h:outputText value="#{SignUpBean.lastName}"/> 
           Email: 
           <h:outputText value="#{SignUpBean.email}"/> 
           Groupname: 
           <h:outputText value="#{SignUpBean.group}"/> 
            <h:panelGroup style="display:block; text-align:center"> 
             <p:commandButton value="Submit" action="#{SignUpBean.signUp}" update="signUpGrowl"/> 
            </h:panelGroup> 
          </h:panelGrid> 
         </p:panel> 
        </p:tab> 
       </p:wizard> 
      </h:form> 
      </f:view> 
     </ui:define> 

Et signUpBean comme ceci:

@ManagedBean(name="SignUpBean") 
@SessionScoped 
public class SignUpBean { 

    private String groupName, groupPass, firstName, lastName, 
      email, password, retypePassword; 
    private boolean join; 
    private boolean skip; 
    @EJB 
    private MessageBeanRemote messageBean2; 

    /** Creates a new instance of SignUpBean */ 
    public SignUpBean() { 
     this.skip = false; 
     this.join = true; 
    } 

    /** 
    * Signs up a user with all the data given on the signUp.jsf page. 
    * If everything is ok then a confirmation email is generated and send 
    * to the new user. 
    * @return Either signUpSucces or signUpFailure 
    */ 
    public void signUp() { 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
     Transaction tx = session.beginTransaction(); 
     // Boolean to decide if the data should be commited or not. 
     boolean commitOK = true; 

     UserHelper uh = new UserHelper(); 
     BasicUser user = uh.getByEmail(this.email); 
     GroupHelper gh = new GroupHelper(); 
     Group group = gh.getByName(this.groupName); 

     // If email does not already exist 
     if(user == null) { 
      user = new BasicUser(); 
      user.setEmail(this.email); 
      user.setFirstName(this.firstName); 
      user.setLastName(this.lastName); 
      if(this.password.equals(this.retypePassword)) { 
       user.setPassword(password); 
      } 
      else { 
       commitOK = false; 
       FacesMessage fm = new FacesMessage("Passwords does not match"); 
       FacesContext.getCurrentInstance().addMessage(null, fm); 
      } 
     } 
     else { 
      commitOK = false; 
      FacesMessage fm = new FacesMessage("Email does already exist"); 
      FacesContext.getCurrentInstance().addMessage(null, fm); 
     } 

     // If it's a joiner to a group 
     if(this.join) { 
      // Is it the right groupPassword and groupName 
      if(group != null && group.getGroupPassword().equals(this.groupPass)) { 
       user.setGroup(group); 
      } 
      else { 
       commitOK = false; 
       FacesMessage fm = new FacesMessage("Wrong group name or password"); 
       FacesContext.getCurrentInstance().addMessage(null, fm); 
      } 
     } 
     else { 
      if(group == null) { 
       group = new Group(); 
       group.setGroupName(this.groupName); 
       group.setGroupPassword(this.groupPass); 
       user.setGroup(group); 
      } 
      else { 
       commitOK = false; 
       FacesMessage fm = new FacesMessage("Group does already exist"); 
       FacesContext.getCurrentInstance().addMessage(null, fm); 
      } 
     } 

     //--- IF EVERYTHING OK THEN UPDATE THE DB ---// 
     if(commitOK) { 

      session.save(group); 
      session.save(user); 
      tx.commit(); 

      session = HibernateUtil.getSessionFactory().getCurrentSession(); 
      tx = session.beginTransaction(); 

      BasicUser newUser = uh.getByEmail(email); 
      int id = newUser.getId(); 

      MobileUser mobile = new MobileUser(); 
      mobile.setId(id); 
      mobile.setUseWhen("Lost"); 

      StatUser stats = new StatUser(); 
      stats.setId(id); 
      stats.setRating(""); 

      DateUser dates = new DateUser(); 
      dates.setId(id); 
      Calendar calendar = Calendar.getInstance(); 
      Date date = calendar.getTime(); 
      dates.setMemberSince(date); 
      dates.setLastLogin(date); 

      session.save(stats); 
      session.save(mobile); 
      session.save(dates); 
      tx.commit(); 

      //----- SEND CONFIRMATION EMAIL ----------// 
      BasicUser emailUser = uh.getByEmail(email); 
      MailGenerator mailGenerator = new ConfirmationMailGenerator(emailUser); 
      try { 
       StringWriter plain = mailGenerator.generatePlain(); 
       StringWriter html = mailGenerator.generateHTML(); 
       messageBean2.sendMixedMail(email, "WMC: Account Info", plain.toString(), 
         html.toString()); 
      } 
      catch (Exception ex) { 
       Logger.getLogger(SignUpBean.class.getName()).log(Level.SEVERE, null, ex); 
      } 

      FacesMessage msg = new FacesMessage("Successful", "Welcome :" + this.getFirstName()); 
      FacesContext.getCurrentInstance().addMessage(null, msg); 
     } 

     //---- DO NOTHING ----// 

    } 

    public String onFlowProcess(FlowEvent event) { 
     if (skip) { 
      skip = false; //reset in case user goes back 
      return "confirm"; 
     } else { 
      return event.getNewStep(); 
     } 
    } 
... getters and setters 
} 

Je sais qu'il est une mauvaise méthode d'inscription et il sera changé par la suite. Quand j'atteins le dernier onglet, puis soumettez je reçois cette erreur:

alt text

Quand je vois que je déboguer la variable jointure est vrai ou faux pas nul. De quoi se plaint-il?

+0

Il n'entrent même pas dans la méthode d'inscription() – AnAmuser

Répondre

0

je résolu le problème en ajoutant un

<h:inputHidden value="#{SignUpBean.join}"/> 

Dans l'onglet de confirmation. Cela fonctionne :)

+1

Cela devrait être un bug dans PrimeFaces. Veuillez ouvrir un problème JIRA ici: http://code.google.com/p/primefaces/issues/list – Dejell

2

Modifier la déclaration variable:

private Boolean join; 

au lieu de

private boolean join; 

Assurez-vous que vous avez getter approprié et poseur!

+0

Cela donne la même erreur. – AnAmuser

+0

J'ai édité ma question. vous devez le changer en String. Par erreur, j'ai écrit Boolean. – Dejell

+0

'Boolean' est très bien. Vous n'avez encore qu'à mettre à jour le getter/setter en conséquence (prenez et renvoyez 'Boolean' au lieu de' boolean'). N'utilisez pas 'String', vous ne pouvez pas l'utiliser correctement dans les conditions booléennes du code bean. – BalusC