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.hoctv.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" ?> <struts> <package name="abc" extends="struts-default" > <action name="login" class="com.hoctv.Login"> <result name="success" >/login-success.jsp</result> <result name="error">/login-error.jsp</result> </action> </package> </struts>
File: Login.java package com.hoctv; 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.hoctv;
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>