2014-09-03 4 views
1

J'ai écrit une application web où il y a login.jsp, loginAction et login Beans. Lorsque je remplis le formulaire dans les beans jsp dans les loginBeans, ils sont remplis via loginAction. Lorsque je réplique la logique de ces pages à l'enregistrement d'un utilisateur, les haricots ne sont pas remplis. Voici mon code ..les beans de classe modèle ne sont pas remplis

<s:form action="login" method="post"> 
    <p>  <s:textfield key="username" label="Username" required="true" /><br> 
    <p> <s:password  key="password" label="Password" required="true" /><br> 
    <p> <s:submit   value="SignIn"/> <br>    
</s:form> 

Code relatif à struts.xml

<action name="login" class="com.ActionClasses.LoginAction"> 
    <result name="success" type="tiles">welcome </result> 
    <result name="login" type="tiles">login  </result> 
    <result name="input" type="tiles">login  </result> 
</action> 

LoginAction.java

public class LoginAction extends ActionSupport implements Action, ModelDriven<LoginBeans>{ 

LoginBeans loginBeans = new LoginBeans(); 
. 
. 
. 
    @Override 
public LoginBeans getModel() {  
    return loginBeans; 
} 

LoginBeans.java

public class LoginBeans { 
private String username; 
private String password; 
//getters and setters 
} 

Ceci est tout travail bien et les haricots sont remplis. Maintenant, regardez l'enregistrement d'un utilisateur.

registerOphthalmologist.jsp

<s:form action="registerOphthalmologist" method="post">  
    <s:hidden  key="role"   label="role" value="O"  /> 
    <s:textfield key="username"  label="Choose UserName" required="true"/> 
    <s:password  key="password"  label="Choose Password" required="true"/> 

    <s:textfield key="givenName"  label="Name" required="true"/> 
    <s:textfield key="surname"  label="Surname" required="true"/> 
    <s:textfield key="age"   label="Age"  required="true"  value=""/> 
    <s:select  key="gender"  label="Gender" 
         list="#{'M':'Male','F':'Female'}" 
         required="true"/> 

    <s:textfield key="contactNumber"  name="contactNumber" label="Contact Number" required="true"/> 
    <s:textfield key="email"    name="email"   label="email"   required="true"/> 
    <s:textfield key="city"    name="city"    label="City"   required="true"/> 
    <s:textfield key="district"   name="district"   label="District"  required="true"/> 
    <s:textfield key="state"    name="state"   label="State"   required="true"/> 
    <s:textfield key="country"   name="country"   label="country"   required="true"/> 
    <s:textfield key="postalCode"  name="postalCode"  label="Postal Code"  required="true"/> 

    <s:textfield key="degree"   label="Qualification"   required="true"/> 
    <s:textfield key="university"  label="University"    required="true"  value=""/> 
    <s:textfield key="hospitalName"  label="Hospital Name"   required="true"/> 
    <s:textfield key="experience"  label="Years of Experience"  required="true"  value=""/> 

    <s:checkbox  key="checkMe"  label="Agree to terms & Conditions"/> 
     <s:submit  value="Register" align="center"/> 

</s:form> 

le code relatif à struts.xml

<action name="register*" class="com.ActionClasses.RegisterAction"> 
    <result name="success" type="tiles"> home  </result> 
    <result name="input" type="tiles"> register{1} </result> 
    <result name="error" type="tiles"> register{1} </result> 
</action> 

RegisterAction.java

public class RegisterAction extends ActionSupport implements Action,ModelDriven<RegisterBeans> 
{ 
RegisterBeans registerBeans = new RegisterBeans(); 
. 
. 
. 
    @Override 
public RegisterBeans getModel() { 
    // TODO Auto-generated method stub 
    return registerBeans; 
} 

RegisterBeans.java

public class RegisterBeans extends ActionSupport{ 

private String username; 
private String password; 
private char role; 
private boolean checkMe; 

private String givenName; 
private String surname; 
private int age; 
private char gender; 

private String hospitalName; 
private String institute; 
private String university; 
private String degree; 
private int experience; 
private int research; 
private int ophthalmologists; 

private String contactNumber; 
private String email; 
private String city; 
private String district; 
private String state; 
private String country; 
private String postalCode; 
//getters and setters 
} 

Ces haricots ne sont pas remplis. Quelle est l'erreur que je fais ici? Mon fichier complet struts.xml est

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
<package name="default" extends="struts-default"> 

    <result-types> 
     <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" /> 
    </result-types> 

    <action name="*Link" method="{1}" class="classes.HomeLinks"> 
     <result name="home"  type="tiles">home </result> 
     <result name="upload" type="tiles">upload  </result> 
     <result name="register" type="tiles">register </result> 
     <result name="login" type="tiles">login  </result> 
    </action> 

    <action name="login" class="com.ActionClasses.LoginAction"> 
     <result name="success" type="tiles">welcome </result> 
     <result name="login" type="tiles">login  </result> 
     <result name="input" type="tiles">login  </result> 
    </action> 

    <action name="logout" class="com.ActionClasses.LogoutAction"> 
     <result name="success" type="tiles">home</result> 
    </action> 

    <action name="register" class="classes.SpecificRegistrations"> 
     <result name="Ophthalmologist" type="tiles"> registerOphthalmologist </result> 
     <result name="practitioner"  type="tiles"> registerPractitioner </result> 
     <result name="Researcher"  type="tiles"> registerResearcher  </result> 
     <result name="Hospital"   type="tiles"> registerHospital  </result> 
     <result name="input"   type="tiles"> register    </result> 
    </action> 

    <action name="register*" class="com.ActionClasses.RegisterAction"> 
     <result name="success" type="tiles"> home  </result> 
     <result name="input" type="tiles"> register{1} </result> 
     <result name="error" type="tiles"> register{1} </result> 
    </action> 

    <action name="upload" class="com.ActionClasses.UploadAction"> 
     <interceptor-ref name="fileUpload"> 
      <param name="maximumSize">3145728</param> 
      <param name="allowedTypes">image/png,image/gif,image/jpeg,image/pjpeg, image/jpg</param> 
     </interceptor-ref> 
     <interceptor-ref name="defaultStack"></interceptor-ref> 
     <result name="success" type="tiles"> uploaded </result> 
     <result name="error" type="tiles"> upload  </result> 
    </action> 
</package> 
</struts> 
+0

Vous avez fait beaucoup d'erreurs, la plupart d'entre elles que vous n'avez pas affichées. –

Répondre

1

Erreur potentielle:

enlever extends ActionSupport de votre

public class RegisterBeans extends ActionSupport{ 
déclaration

. Il sera traité comme une action dans certaines circonstances et ce n'est pas ce que vous voulez.

Avertissements:

  1. Évitez d'utiliser key attribut si vous spécifiez trop label et value, utilisez name à la place. Selon the docs, il

    Set the key (name, value, label) for this particular component

  2. Toujours spécifier un espace de noms à la fois dans la configuration des entretoises et <s:form> attribut, il est bon de travailler sur le seul espace de noms par défaut.

  3. Soyez prudent avec l'attribut required="true"; il fonctionne dans les anciennes versions de Struts, mais après la migration vers une nouvelle version, it has been changed to requiredLabel, et puisque <s:textfield /> supporte les attributs dynamiques, il sera signalé sur la page exactement comme il est (required="true"), puis interprété par les navigateurs comme l'attribut HTML5 required="required", rendant tous vos champs obligatoires et sans le symbole * à venir. J'ai rencontré ça hier en migrant un vieux projet, c'est vraiment énervant.

  4. Par souci de cohérence, une entité représentant un haricot unique devrait être appelé LoginBean ou RegisterBean au lieu de la forme plurielle LoginBeans ou RegisterBeans. Idem pour les variables d'instance, vous devez utiliser la forme plurielle que lorsqu'il est un tableau, une collection, etc ...

  5. ActionSupport est défini comme

    public class ActionSupport implements Action, Validateable, ValidationAware, 
                TextProvider, LocaleProvider, Serializable { 
    

    donc étendre et mettre en œuvre l'interface d'action est redondante .

+2

Vous avez oublié: "Et arrêtez d'utiliser modeldriven!" point. ;) –

+0

Même après avoir retiré le modèle entraîné, les haricots ne sont pas remplis. Comme le loginBean est rempli, j'ai encore utilisé ModelDriven dans registerBean. Pouvez-vous me dire un problème avec ModelDriven? – Pawan

+0

Faites également vos haricots 'private' et vérifiez vos piles intercepteur –

Questions connexes