modelDriven Interceptor trong Struts 2




modelDriven Interceptor làm cho đối tượng model khác thành như đối tượng mặc định của ValueStack. Theo mặc định thì đối tượng action là đối tượng mặc định của ValueStack. Để sử dụng modelDriven Interceptor, bạn cần triển khai ModelDriven Interface trong lớp action của bạn và ghi đè phương thức getModel() của nó.

Theo mặc định, nó được tìm thấy trong default stack, do đó bạn không cần xác định nó một cách tường minh.

modelDriven Interceptor này không định nghĩa tham số nào.

Ví dụ modelDriven Interceptor trong Struts 2

<action name="login" class="com.vietjack.LoginAction">
    <interceptor-ref name="params"/>
    <interceptor-ref name="modelDriven"/>
    <result name="success">login-success.jsp</result>
</action>

Ví dụ đầy đủ của modelDriven Interceptor trong Struts 2

File: index.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>

<s:form action="login">
<s:textfield name="name" label="Name"></s:textfield>
<s:password name="password" label="Password"></s:password>
<s:submit value="login"></s:submit>
</s:form>

File: struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

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

<action name="login" class="com.vietjack.Login">
<result name="success" >/login-success.jsp</result>
<result name="error">/login-error.jsp</result>
</action>

</package>
</struts>    

File: Login.java

package com.vietjack;
import com.opensymphony.xwork2.ModelDriven;

public class Login implements ModelDriven<User>{
private User user;

public User getUser() {
	return user;
}

public void setUser(User user) {
	this.user = user;
}
public User getModel(){
	user=new User();
	return user;
}
public String execute(){
if(user.getPassword().equals("admin")){
	return "success";
}
else{
	return "error";
}
}

}

File: User.java

package com.vietjack;

public class User {
private String name,password;
//phuong thuc getter va setter
}

File: login-success.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>

Welcome, <s:property value="name"/>

File: login-error.jsp

Xin loi, xay ra loi voi username hoac password ban nhap vao!
<jsp:include page="index.jsp"></jsp:include>

Chạy ứng dụng và kiểm tra kết quả.

Ghi chú: Nếu bạn không triển khai modelDriven Interface, bạn cần sử dụng tên các trường user.name và user.password trong index.jsp file, nếu không giá trị đã cho sẽ không được thiết lập.