上一篇文章刚刚说到action注入属性住的问题,现在来详细地说一下
注入action属性值的方法有多种:
第一种:使用表单(form)注入
html代码片段:
<form action="loginAction" method="post">
用户名<input type="text" name="user.username"><br>
密码<input type="password" name="user.password"><br>
<input type="submit" value="确认"/>
</form>
action的实现代码片段:
public class loginAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String login() throws Exception
{
//有关login的业务逻辑
}
}
其工作机制就是:首先http协议收集表单中各输入域的值;然后struts2框架按照表单中各输入域的name属性名称与action属性名称进行匹配;调用显影的setter方法实现属性值的注入。
可能有人好奇,struts2框架具体是怎么实现为action属性值赋值的。大家应该知道,action调用前后要经过一系列的拦截器,params拦截器就是实现这个功能的(框架,说的通俗一点就是把大量的web应用程序中通用的代码抽取出来,制作成框架,就拿params拦截器举例子,是不是比你写要方便多了)。
仔细看上面的代码,你会发现,我并没有把action的属性设置成各个具体的属性,而是利用了java bean对象(基于OGNL的类型转换机制),记得修改form表单单中输入域的name。利用form表单也是平时最常用的为action注入属性值的方式。
第二种:使用xml文件
<package name="default" namespace="/" extends="struts-default">
<action name="loginAction" class="com.action.UserAction">
<span style="white-space:pre"> </span><span style="color:#ff0000;"><param name="user.username">Aomr</param></span>
<span style="color:#ff0000;"><span style="white-space:pre"> </span><param name="user.password">123</param></span>
<result name="teacher">/teacher.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
第三种:使用查询字符串参数
举个例子就能看懂,http://localhost:8080/ch/loginAction?user.username=admin&user.password=123