使用标签
注意:Struts2使用标签库找不到URI:[struts-tags]的taglib[s]问题解决
新建 login2.jsp
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Struts2.3 Login2</title> </head> <body> <s:form action="login"> <s:textfield name="username" label="username"></s:textfield> <s:textfield name="password" label="password"></s:textfield> <s:submit label="submit"></s:submit> </s:form> </body> </html>
|
查看结果:
在 Action 中使用 ActionSupport
新增页面
login3.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Struts2.3 Login3</title> </head> <body> <s:form action="login3"> <s:textfield name="username" label="username"></s:textfield> <s:textfield name="password" label="password"></s:textfield> <s:submit label="submit"></s:submit> </s:form> </body> </html>
|
LoginAction3.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package space.terwer;
import org.apache.commons.lang3.StringUtils;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction3 extends ActionSupport{ private String username; private String password;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
@Override public void validate() { if(StringUtils.isBlank(this.getUsername())) { this.addFieldError("username", "username required"); } if(StringUtils.isBlank(this.getPassword())) { this.addFieldError("password", "password required"); } }
public String execute() { return "success"; } }
|
struts.xml
1 2 3 4 5
| <action name="login3" class="space.terwer.LoginAction3"> <result name="success">/result.jsp</result> <result name="input">/login3.jsp</result> </action>
|
效果
业务验证
在 LoginAction2.java
的 execute()
方法添加验证逻辑
1 2 3 4 5 6 7 8
| public String execute() { if("hello".equals(this.getUsername().trim()) && "world".equals(this.getPassword().trim())){ return "success"; }
this.addFieldError("username", "username or password error"); return "failer"; }
|
在 struts.xml
加入跳转逻辑
1 2 3 4 5 6
| <action name="login3" class="space.terwer.LoginAction3"> <result name="success">/result.jsp</result> <result name="input">/login3.jsp</result> <result name="failer">/login3.jsp</result> </action>
|
效果
注意:result.jsp
里面的两种写法等价。
1 2
| username:${requestScope.username}<br /> password:${requestScope.password }
|
1 2
| username:<%=request.getParameter("username") %><br /> password:<%=request.getParameter("password") %>
|
类型转换深入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Struts2.3 convert test</title> </head> <body>
<h3 style="color:red;">使用逗号将点的两个坐标分隔开</h3> <s:form action="pointConverter"> <s:textfield name="point" label="point"></s:textfield> <s:textfield name="age" label="age"></s:textfield> <s:textfield name="username" label="username"></s:textfield> <s:textfield name="date" label="birthday"></s:textfield> <s:submit value="Submit"></s:submit> </s:form> </body> </html>
|
Point 对象
新建一个 bean
为 Point.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package space.terwer.bean;
public class Point { private Integer x; private Integer y;
public Integer getX() { return x; }
public void setX(Integer x) { this.x = x; }
public Integer getY() { return y; }
public void setY(Integer y) { this.y = y; } }
|
OGNL 官网
https://commons.apache.org/proper/commons-ognl/
新的官网
https://github.com/apache/commons-ognl
新建一个类型转换器类 PointConverter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package space.terwer.converter;
import java.util.Map;
import ognl.DefaultTypeConverter; import space.terwer.bean.Point;
public class PointConverter extends DefaultTypeConverter {
@Override public Object convertValue(Map context, Object value, Class toType) { if (Point.class == toType) { Point point = new Point();
String[] str = (String[]) value; String[] paramValues = str[0].split(",");
Integer x = new Integer(paramValues[0]); Integer y = new Integer(paramValues[1]);
point.setX(x); point.setY(y);
return point; }
if (String.class == toType) { Point point = (Point) value;
int x = point.getX(); int y = point.getY();
String result = "[x=" + x + ", y=" + y + "]";
return result; }
return null; }
}
|
新建一个 PointAction 处理类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package space.terwer.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
import space.terwer.bean.Point;
public class PointAction extends ActionSupport { private Point point; private Integer age; private String username; private Date date;
public Point getPoint() { return point; }
public void setPoint(Point point) { this.point = point; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public Date getDate() { return date; }
public void setDate(Date date) { this.date = date; }
@Override public String execute() throws Exception { return SUCCESS; } }
|
struts.xml 添加处理流程配置:
1 2 3
| <action name="pointConverter" class="space.terwer.action.PointAction"> <result name="success">/output.jsp</result> </action>
|
新增转换器配置
必须在当前 Action 同级目录新建 Action类名-conversion.properties
,例如:
1
| PointAction-conversion.properties
|
内容为 需要转换的属性名称
和 转换器全路径
,例如本例子内容如下:
1
| point=space.terwer.converter.PointConverter
|
重启服务器。
特别指出:转换器文件前面必须是Action类名,后缀必须是:
output.jsp 显示页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Point result</title> </head> <body>
point:<s:property value="point" /><br/> age:<s:property value="age" /><br/> username:<s:property value="username" /><br/> date:<s:property value="date" />
</body> </html>
|
查看效果