2

struts.xml で:

    <action name="User_UserFormSubmit"  class="actions.UserManager">
        <result name="input" >/jsp/user_form.jsp</result>
        <result name="success" type="redirectAction"> success_register</result>
    </action>

私のクラス:

public class UserManager extends ActionSupport implements ModelDriven<User>{

   private User user = new User();

   @Override
   public User getModel() {
    return user;
   }

   public String validate() {
    addActionError("blabla");
   }
   public String execute() {
    return SUCCESS;
} ...

次にjspで:

    <s:property value="getActionErrors()"/>

入力結果に期待します:

   <li> blabla </li>

無事user_form.jspにたどり着いたのですが、actionErrorが出ません

「implements ModelDriven」なしで試してみましたが、動作します

モデル駆動型はactionErrorsを消去します(私は推測しました)

検証とモデル駆動型を使用したい ¿

4

2 に答える 2

2

モデル駆動の大ファンではありませんが、例を次に示します。

例の前に、ModelDriven に関しては、validate() の使用はあまり意味がないことに注意してください。その理由は、モデルは複数のアクションで使用する必要があるため、検証はおそらく一貫しているはずです。プロパティ名を少し短くするためだけにモデル駆動型を使用することはありません (そのために struts2 プッシュ タグを使用します)。モデルはどのアクションよりも大きいため、このような検証は xml で行う必要があります。そのモデルを使用する各アクションは、訪問者バリデーターを使用します。このバリデーターは、モデルの xml 検証ファイルを検索するだけです。ただし、次の例では、時間を節約するためにアクションで validate() メソッドを使用します。

次の例では、struts2-conventions-plugin を使用してサンプルのサイズを縮小します (プロジェクトに追加するには、jar を 1 つ追加するだけです)。

作成: com.quaternion.action.AddUser

package com.quaternion.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class AddUser  extends ActionSupport implements ModelDriven<User>{
    User user = new User();

    @Override
    public User getModel() {
        return user;
    }

    @Override
    public void validate(){
       if (user.age != 12) {
        super.addActionError("bla bla bla");
       }
    }  
}

作成: com.quaternion.action.User

package com.quaternion.action;

public class User {
    public String name;
    public int age;
}

作成: /WEB-INF/content/add-user-input.jsp

<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>Form</title>
    </head>
    <body>
        <h1>Form</h1>
        <s:actionerror/>
        <s:form action="add-user">
            <s:textfield name="name"/>
            <s:textfield name="age"/>
            <s:submit/>
        </s:form>
    </body>
</html>

作成: /WEB-INF/content/add-user-success.jsp

<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>Success</title>
    </head>
    <body>
        <h1>Success</h1>
    </body>
</html>

テストするには:

/ add -user-inputをアクション名としてコンテキスト パスに追加します。12 歳を入力すると成功ページが表示され、それ以外を入力するとアクション エラーが表示されます。これは動作することがテストされています。タイプミスがあった可能性がありますが、取り除かなければならない主なことは、アプリケーションにエラーがあることです。両方の規則または xml を使用すると、実行していることに問題はないはずです。

于 2012-03-19T20:43:18.670 に答える
0

@validationsバリデーターでモデル駆動型オブジェクトにアクセスすることもできます。

@Action(value = "save-user")
@Validations(
    stringLengthFields = { 
        @StringLengthFieldValidator(fieldName = "name", trim = true, key = "validate.required.string.length"),
        @StringLengthFieldValidator(fieldName = "age", trim = true, key = "validate.required.string.length"),
        @StringLengthFieldValidator(fieldName = "address.addLine1", trim = true, key = "validate.required.string.length")
        })

public String save()  {
于 2013-12-12T16:59:15.927 に答える