接受参数的三种方法
-
1)同名参数传值
接受register.jsp中的value值.
<td>姓名:</td><td><input type="text" name="name"></td>
UserAction写user的get和set方法
private String name;
private String pwd;
private String repwd;
private Integer age;
private String gender;
public String register(){
User user=new User(null, name, pwd, age, gender);
msg="注册成功";
System.out.println(user);
return "login";
}
-
2)域模型
login.jsp<h4 style="color:red">${user.name}</h4>
register.jsp
<form action="user!register.action" >
<td>姓名:</td><td><input type="text" name="user.name"></td>
UserAction.java写user的get和set方法
private User user;
struts.xml的配置
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<action name="user"
class="com.huihui.week3.web.action.UserAction">
<result name="login">/WEB-INF/jsp/login.jsp</result>
<result name="register">/WEB-INF/jsp/register.jsp</result>
</action>
测试结果:
(1)http://localhost:8888/week3/user!toRegister.action
(2)点击提交后
-
3)模型驱动
UserAction
class TestAction implements ModelDriven<User>{
@Override
public User getModel() {
if(user == null){
user= new User();
}
return user;
}
}
public String register(){
System.out.println(user);
return "login";
}
register.jsp
<td>姓名:</td><td><input type="text" name="name"></td>
struts.xml的配置同2)的配置
action中的跳转方式
1)chain (action->action) 内部跳转
从一个action里面服务器内部跳转到另一个action中
也可以说是从一个方法跳转到另外一个方法。
<action name="jump" class="com.huihui.week3.web.action.JumpAction">
<result name="a" type="chain">
访问b方法
<param name="namespace">/</param>
<param name="actionName">jump</param>
<param name="method">A</param>
</result>
<result name="b">/WEB-INF/jsp/index.jsp</result>
</action>
2)dispatcher (action->jsp)内部跳转
<action name="jump" class="com.huihui.week3.web.action.JumpAction">
<result name="register" type="dispatcher">/WEB-INF/jsp/register.jsp</result>
</action>
3)redirect (action->jsp) 外部跳转
从一个action里面客户端重定向到一个页面中.
<action name="test" class="com.huihui.week3.web.action.TestAction">
<result name="success" type="redirect">/WEB-INF/jsp/index.jsp</result>
</action>
- redirectAction(action->action)
从一个action里面客户端重定向到另一个action里面
struts.xml
<action name="test" class="com.huihui.week3.web.action.TestAction">
<result type="redirectAction" name="A">
<param name="namespace">/</param>
<param name="actionName">test</param>
<param name="method">A</param>
</result>
<result name="login">/WEB-INF/jsp/login.jsp</result>
</action>
TestAction.java
public String toA(){
System.out.println("toA");
return "A";
}
public String A(){
System.out.println("A");
return "login";
}
输入http://localhost:8888/week3/test!toA.action后就变为http://localhost:8888/week3/test!A.action
配置全局的跳转.
<global-results>
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
作用: 将来在其他任何action中,如果有需要返回success字符串跳转到success.jsp或者返回error字符串跳转到error.jsp的时候,就不需要在单独定义,因为已经把这个俩个跳转定义成了全局的跳转,对当前package里面的所有action都起作用.同时还可以在某一个action中再重新定义一下这个俩个跳转,这个时候全局跳转就不会对这个action起作用了.
TestAction
public String errors(){
return "error";
}
struts.xml的配置保持不变,不需要配置跳转到error.jsp页面的信息
结果:http://localhost:8888/week3/test!errors.action
直接就跳转到了error.jsp
error.jsp在WebContent下面。
配置package中默认的action
<default-action-ref name="methodTest"></default-action-ref>
作用:如果地址栏中访问到了当前package下面一个不存在的action的时候,正常情况下是会直接报错的,错误信息显示这个action找不到,但是我们一旦配置了这个默认的action之后,那么再去访问一个不存在的action就不会报错了,而是直接就去访问这个默认的action.这个默认的action需要我们在当前package里面定义出来,并且在<default-action-ref>标签中引用一下.
注意:访问某个package下面action的时候有几种错误的情况:
1.action找不到
2.action找到了但是action对应的类找不到.
3.action找到了,对应的类找到了,但是在类中要执行的方法没找到。
4.action找到了,对应的类找到了,类中要执行的方法找到了,但是方法返回的字符串在<result>标签中没有定义.
5.action找到了,对应的类找到了,类中要执行的方法找到了,方法返回的字符串在<result>标签也定义了出来,但是要跳转的页面没有找到.
struts.xml
下面的配置要在package之下和global-results之上。
这里的test的指的是继承了ActionSupport的TestAction中默认的success。
<default-action-ref name="test"></default-action-ref>