• Struts2的三种传值方式


    摘抄自别人的。。。

    原文地址:http://blog.csdn.net/manchester117/article/details/51543566

    1.普通的传值方式

    UserActionForCommonParam类

    Action类接收三个参数,分别是id,username,content.

    package com.struts.action;

    public class UserActionForCommonParam {
    private int id;
    private String username;
    private String content;

    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }

    public String getContent() {
    return content;
    }

    public void setContent(String content) {
    this.content = content;
    }

    // 从前台页面接收到参数后会在这个方法里打印
    public String addUser() {
    System.out.println("ID: " + this.getId());
    System.out.println("Username: " + this.getUsername());
    System.out.println("Content: " + this.getContent());
    return "success";
    }
    }

    对应的struts.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

    <struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    <constant name="struts.devMode" value="true"/>
    <package name="default" namespace="/" extends="struts-default">
    <action name="UserActionForCommonParam" class="com.struts.action.UserActionForCommonParam" method="addUser">
    <result name="success">/UserPage.jsp</result>
    </action>
    </package>
    </struts>

    前台页面UserPage.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>UserPage</title>
    </head>
    <body>
    <%--下面的Table用于提交参数(id,username,content)--%>
    <form action="UserActionForCommonParam" method="POST">
    <table border="1">
    <tr>
    <td>ID:</td>
    <td><input type="text" name="id"/></td>
    </tr>
    <tr>
    <td>Username:</td>
    <td><input type="text" name="username"/></td>
    </tr>
    <tr>
    <td>Content:</td>
    <td><input type="text" name="content"/></td>
    </tr>
    <tr>
    <td colspan="2" align="center">
    <input type="submit" value="提交"/>
    </td>
    </tr>
    </table>
    </form>
    <br/>
    <%--下面的Table用于显示传递回来id,username,content--%>
    <table border="1">
    <tr>
    <td>ID: </td>
    <td><input type="text" value="${id}"/></td>
    </tr>
    <tr>
    <td>Username: </td>
    <td><input type="text" value="${username}"/></td>
    </tr>
    <tr>
    <td>Content: </td>
    <td><input type="text" value="${content}"/></td>
    </tr>
    </table>
    <%--用于查看ValueStack中的传递的值--%>
    <s:debug/>
    </body>
    </html>

    在实践后会发现,如果遇到参数非常多的情况,那么就需要在Action类中写非常多的属性以及对应的get/set方法.所以这种方式不太可取.解决问题的方法必然是封装一个JavaBean.这就用到了Strut2的第二种传值方式--DomainModel

    2.DomainModel传值

    首先要创建一个存储的JavaBean

    User类

    把id,username,content封装的到一个User类当中.

    package com.struts.model;

    public class User {
    private int id;
    private String username;
    private String content;

    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }

    public String getContent() {
    return content;
    }

    public void setContent(String content) {
    this.content = content;
    }
    }

    UserActionForDomainModel类

    package com.struts.action;

    import com.opensymphony.xwork2.ActionSupport;
    import com.struts.model.User;

    public class UserActionForDomainModel extends ActionSupport{
    private User user;

    public User getUser() {
    return user;
    }

    public void setUser(User user) {
    this.user = user;
    }

    public String addUser() {
    System.out.println("ID: " + user.getId());
    System.out.println("Username: " + user.getUsername());
    System.out.println("Content: " + user.getContent());
    return "success";
    }
    }

    对应的struts.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

    <struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    <constant name="struts.devMode" value="true"/>
    <package name="default" namespace="/" extends="struts-default">
    <action name="userForDomainModel" class="com.struts.action.UserActionForDomainModel" method="addUser">
    <result name="success">/UserPage.jsp</result>
    </action>
    </package>
    </struts>

    前台页面UserPage.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>UserPage</title>
    </head>
    <body>
    <%--要特别注意的是DomainModel的传值方式必须要使用对象.参数方式进行赋值以及取值--%>
    <form action="userForDomainModel" method="POST">
    <table border="1">
    <tr>
    <td>ID:</td>
    <td><input type="text" name="user.id"/></td>
    </tr>
    <tr>
    <td>Username:</td>
    <td><input type="text" name="user.username"/></td>
    </tr>
    <tr>
    <td>Content:</td>
    <td><input type="text" name="user.content"/></td>
    </tr>
    <tr>
    <td colspan="2" align="center">
    <input type="submit" value="提交"/>
    </td>
    </tr>
    </table>
    </form>
    <br/>
    <%--下面的Table用于显示传递回来id,username,content--%>
    <table border="1">
    <tr>
    <td>ID: </td>
    <td><input type="text" value="${user.id}"/></td>
    </tr>
    <tr>
    <td>Username: </td>
    <td><input type="text" value="${user.username}"/></td>
    </tr>
    <tr>
    <td>Content: </td>
    <td><input type="text" value="${user.content}"/></td>
    </tr>
    </table>
    <%--用于查看ValueStack中的传递的值--%>
    <s:debug/>
    </body>
    </html>

    实际上User类不需要显式的实例化,struts会自动帮你实例化,但前提条件是,传值时需要使用对象.参数名的方式进行传递.

    除了这种传值方式外,struts2还提供另外一种传值方式.

    3.ModelDriven传值

    依然要创建User的JavaBean

    User类

    ...

    UserActionForModelDriven类

    package com.struts.action;

    import com.opensymphony.xwork2.ModelDriven;
    import com.struts.model.User;

    public class UserActionForModelDriven implements ModelDriven<User>{
    private User user;

    public String addUser() {
    System.out.println("ID: " + user.getId());
    System.out.println("Username: " + user.getUsername());
    System.out.println("Content: " + user.getContent());
    return "success";
    }

    @Override
    public User getModel() {
    if (user == null) {
    user = new User();
    }
    return user;
    }
    }

    这种方式可以不用在Action类中编写对应的get/set方法,但是需要实例化User类.

    前台UserPage.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>UserPage</title>
    </head>
    <body>
    <form action="userForModelDriven" method="POST">
    <table border="1">
    <tr>
    <td>ID:</td>
    <td><input type="text" name="id"/></td>
    </tr>
    <tr>
    <td>Username:</td>
    <td><input type="text" name="username"/></td>
    </tr>
    <tr>
    <td>Content:</td>
    <td><input type="text" name="content"/></td>
    </tr>
    <tr>
    <td colspan="2" align="center">
    <input type="submit" value="提交"/>
    </td>
    </tr>
    </table>
    </form>
    <br/>
    <%--下面的Table用于显示传递回来id,username,content--%>
    <table border="1">
    <tr><span id="transmark"></span>
    <td>ID: </td>
    <td><input type="text" value="${id}"/></td>
    </tr>
    <tr>
    <td>Username: </td>
    <td><input type="text" value="${username}"/></td>
    </tr>
    <tr>
    <td>Content: </td>
    <td><input type="text" value="${content}"/></td>
    </tr>
    </table>
    <%--用于查看ValueStack中的传递的值--%>
    <s:debug/>
    </body>
    </html>

    页面还是和普通传值一样.

  • 相关阅读:
    【cocos2d-js网络教程篇】cocos2d-js http网络请求
    COCOS2D
    Laravel5中的Session
    Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库
    cocos-js Http方式网络请求
    Python语法31[module/package+import]
    cocos2d-js callFunc传参
    安装pygame for Python3.5
    阿里云vsftp安装和简单的配置
    Git代码行统计命令集
  • 原文地址:https://www.cnblogs.com/yuezeyuan/p/8533013.html
Copyright © 2020-2023  润新知