1

login.jsp、loginAction、および login Bean がある Web アプリケーションを作成しました。loginbeans の jsp Bean でフォームに入力すると、loginAction によって入力されます。これらのページからロジックを複製してユーザーを登録すると、Bean が満たされません。これが私のコードです..

<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>

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
}

これはすべて正常に機能しており、Bean が満たされています。次に、ユーザーの登録を見てみましょう。

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>

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
}

これらの豆は満たされていません。私がここでやっている間違いは何ですか?私の完全な struts.xml ファイルは

<?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>
4

1 に答える 1

1

潜在的なエラー:

あなたから削除extends ActionSupportします

public class RegisterBeans extends ActionSupport{

宣言。状況によってはアクションのように扱われますが、それは望ましくありません。

警告:

  1. 属性を指定しkeyている場合は使用を避け、代わりに使用してください。ドキュメントによると、labelvaluename

    この特定のコンポーネントのキー (名前、値、ラベル) を設定します

  2. struts 構成と属性の両方で常に名前空間を指定します<s:form>。デフォルトの名前空間だけで作業するのは良くありません。

  3. required="true"属性には注意してください。古い Struts バージョンで動作しますが、新しいリリースに移行した後、に変更されました。動的属性をサポートしているrequiredLabelため<s:textfield />、ページ上でそのまま ( ) とまったく同じようにレポートされ、HTML5属性required="true"のようにブラウザーによって解釈されます。 required="required"、すべてのフィールドを必須にし、前に*記号を付けません。昨日、古いプロジェクトを移行しているときにそれに遭遇しました。本当に迷惑です。

  4. 一貫性を保つために、単一の Bean を表すエンティティは、複数形の or の代わりに or と呼ぶ必要がありLoginBeanます。インスタンス変数についても同様です。配列、コレクションなどの場合にのみ複数形を使用する必要があります...RegisterBeanLoginBeansRegisterBeans

  5. ActionSupportと定義されている

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

    したがって、それを拡張して Action インターフェースを実装することは冗長です。

于 2014-09-03T08:31:23.877 に答える