首页投稿(暂停使用,暂停投稿)程序员@IT·互联网

struts的使用加强版

2016-07-13  本文已影响58人  huhu502

接受参数的三种方法

 <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";
}

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

Paste_Image.png

(2)点击提交后

Paste_Image.png
   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>
  1. 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>
上一篇下一篇

猜你喜欢

热点阅读