モデル駆動の大ファンではありませんが、例を次に示します。
例の前に、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 を使用すると、実行していることに問題はないはずです。