struts2中把action中的值传递到jsp页面的例子

例子:

RegistAction的代码:

package com.wss.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.wss.Dao.School;
import com.wss.Dao.User;
import com.wss.Dao.UserDao;

public class RegistAction extends ActionSupport {

    public RegistAction()
    {
        System.out.println("Initialization RegistAction....");
    }
    //user有Get和Set方法,是类成员,只需要赋值就可以
    private User user =new User();
    //private User user;

    public User getUser() {
        System.out.println("Getting the getUser");
        return user;
    }

    public void setUser(User user) {
        System.out.println("Setting the setUser");
        this.user = user;
    }

    //school有Get和Set方法,是类成员,只需要赋值就可以
    private School school;
    public School getSchool() {
        System.out.println("Getting the getSchool");
        return school;
    }

    public void setSchool(School school) {
        System.out.println("Setting the setSchool");
        this.school = school;
    }
    //company有Get和Set方法,是类成员,只需要赋值就可以
    private String company;
    public void setCompany(String company)
    {
        System.out.println("Setting the company");
        this.company=company;
    }

    public String getCompany()
    {
        return this.company;
    }

    public String execute() throws Exception{
        UserDao ud =new UserDao();
        //ActionContext ctx = ActionContext.getContext();
        //HttpServletRequest request = (HttpServletRequest) ctx.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
        //request.setAttribute("company", this.company);

        System.out.println("The company is "+this.company+" The name is "+this.user.getName()+" The address is "+this.user.getAddress());
        System.out.println("The school name is "+this.school.getName()+" The city is "+this.school.getCity()+" The department is "+ this.school.getDepartment());

        ActionContext.getContext().put("message","注册成功");
        ServletActionContext.getRequest().setAttribute("school","北京大学");
        //if(ud.regist(user)!=0){

        ActionContext.getContext().getSession().put("welcome", "欢迎访问");
        ServletActionContext.getRequest().getSession().setAttribute("city", "北京,上海,深圳");

        String label="标签内容";
        ActionContext.getContext().put("label", label);
            this.addFieldError("success", "成功");
            return SUCCESS;
        //}
        //this.addFieldError("error", "注册失败");
        //return ERROR;

    }
}

regist.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ page contentType="text/html;charset=gbk"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>"> 

    <title>京东商城注册页面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <%
        request.setCharacterEncoding("gbk");
     %>
  </head>

  <body>
           <center>
               <form action="regist" method="post">

                   用户名:<input type="text" name="user.name"/><br>
                   密&nbsp;&nbsp;码:<input type="password" name="user.password"/><br>
                   手&nbsp;&nbsp;机:<input type="text" name="user.phone" /><br>
                   地&nbsp;&nbsp;址:<input type="text" name="user.address"/><br>

                   公&nbsp;&nbsp;司: <input type="text" name="company"/> <br>

                   学&nbsp;&nbsp;校:<input type="text" name="school.name"/>
                   城&nbsp;&nbsp;市:<input type="text" name="school.city" />
                   院&nbsp;&nbsp;系:<input type="text" name="school.department" />

                   <table>
                    <tr>
                        <td><input type="submit" value="注册"/></td>
                        <td><input type="reset" value="重置" ></td>
                    </tr>
                </table>
               </form>
            <s:fielderror />

           </center>
  </body>
</html>

login.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<%
String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>京东商城</title>
            <style>
            .head ul{
                width:980px;
                border:1px;
                solid:#000;
                margin:0 auto;
            }
            .head ul li{
                float:left;
            }
            .head ul li a{
            width:80px;/*设置元素宽为80px*/
            height:28px;/*设置高度为28px*/
            line-height:28px;/*设置行距为28px,让文字在每行的中间位置*/
            background:#3A5FCD;/*设置元素的背景为红色*/
            color:#FFF;/*文字颜色是白色*/
            margin:5px 10px;
            font-size:12px;/*用12号字*/
            display:block;/*这个比较关键,因为a本身就是联级元素,本身不具有宽高,用这个把它变成块级元素,这样前面设置的宽和高就能起作用了*/
            text-align:center;/*让文本居中*/
            text-decoration:none; /*去掉下划线*/
            }

            .head ul li a:hover{ /*这个大概的意思就是当鼠标放到这个a元素的上面时,这个a元素的样式就按下面的代码执行*/
                width:78px;
                height:26px;
                line-height:28px;
                border:1px solid red;
                color:white;
                background:#40E0D0;
}
        </style>
    <script type="text/javascript">
        function forword(){
            window.location.href="regist.jsp";
        }
    </script>

  </head>

  <body>
        <center>
        <div class="head">
        <ul>
            <li><a href="login.jsp">首页</a></li>
            <li><a href="">商品</a></li>
            <li><a href="">用户信息</a></li>
            <li><a href="">购物车</a></li>
            <li><a href="">发现</a></li>
            <li><a href="">请联系我们</a></li>
        </ul>
        </div>
        <h2><font color="#FF7F00">登录</font></h2>
            <form action="login"  method="post" name="myform">

                用户名:<input type="text"  name="name" /><br>
                密&nbsp;&nbsp;码:<input type="password" name="password"/><br>
                <table>
                    <tr>
                        <td><input type="submit" value="登录"/></td>
                        <td><input type="reset" value="重置" ></td>
                        <td><input type="button" value="注册" onClick="forword()"></td>
                    </tr>

                </table>
            </form>
            <s:fielderror>
                <s:param>success</s:param>
            </s:fielderror>

            类属性 company(el表达式): ${company}</br>
            类属性 用户名 (el表达式):${user.name}</br>
            方法值 request 注册 (el表达式):${message }</br>
            方法值 session 欢迎词 (el表达式) :${welcome}</br>
            方法值 session 城市 (el表达式):${city}</br>
            struts 类属性 用户名:<s:property value="user.name"/></br>
            struts 类属性 公司:<s:property value="company"/></br>
            struts session welcome:<s:property value="welcome"/> </br>
            struts session 城市:<s:property value="city"/></br>
            struts 方法值 request 标签:<s:property value="label"/></br>
            struts 类属性  school: <s:property value="school.city"/> </br>
            方法值 request 学校 (el表达式):${school} </br>
            方法值 request 标签:${label}
        </center>
  </body>
</html>

运行结果:

注意:
(1)发现el表达式不管是通过:ActionContext.getContext().put("message",message);

ServletActionContext.getRequest().setAttribute("messae",message);把类属性数据或者方法数据存储到request中,都能用el表达式获得。

(2)方法中的数据值用:

ActionContext.getContext().getSesstion().put("message",message);

ServletActionContext.getRequest().getSesstion().setAttribute("message",message);这两种方法把数据存储到session中,都可以用el表达式获得,并且不需

要${sessionScope.message }中的sessionScope也可以获取数据。

(3)同时struts标签可以对类属性值(自带有set和get就是默认会放入request中)、没有set和get的类属性值编写代码放入request中、方法中的值用代码放入request中

都可以用struts自带的标签<s:property value="message"/>获取数据。

但是struts标签对放入session中的数据不能显示。

如果打开浏览器重新输入http://localhost:8080/ShopDemo/,那么用session保存的数据仍然存在。

浏览器同一个标签,但是前进和退回,在注册页不输入任何的内容,但是当点击注册时候,用ActionContext,ServletActionContext的方法通过request或者session的方法保存的数据,仍然存在;但是通过struts2自动将action的所有带有get,set(这两个方法必须同时有)的属性放入request域中的数据,没有了,显示空值。

 request 和sesstion保存数据的作用域,时间域,区别和联系?

时间: 2024-10-10 23:00:46

struts2中把action中的值传递到jsp页面的例子的相关文章

Android笔记(二十) Activity中的跳转和值传递

我们知道,一个APP是由若干个Activity组成的,那么各个Acitivity中肯定需要进行跳转以及传递数值以保证App的运行,现总结一下多个Activity之间的跳转和值传递. 简单的跳转 AndroidManiFest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/andro

Backbone中父子view之间的值传递

backbone中,使用最多的莫过于在view中进行操作,如模板的渲染以及事件函数的定义.为了提高代码的可维护性,一般地我们会写多个视图即view,将界面按照功能的不同进行模块化划分,模块与view一一对应. 首先,我们会定义一个父view,在view中控制不同子view的渲染,子view之间尽量不产生联系.这样,代码之间的耦合度会降低很多,模块的功能明确化,同时降低了开发的难度.笔者最近在项目中遇到父子view传值问题,学习到了一个知识点,比较简单易懂.主要想分享两个内容:1.父子view是如

实现J2EE中后台action中控制前台javascript弹出对话框

1.后台Action中: request.setAttribute("message", "此用户名或密码错误,请从新输入!"); 2.前台jsp页面中: 2.1.在<body>标签中增加onload方法,比如:<BODY  topmargin="0" leftmargin="0" onload="checkForm()"> 2.2.在本jsp页面中加入js代码块,如下: <!

在Java中导出word、excel格式文件时JSP页面头的设置

我们在JSP中往往会把一些表格里的东西需要导出到本地,一般都是导成word.excel格式的文件.这只需要在JSP页面头设置及在<head></head>标签中添加下面的代码: 导出为excel: <% response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition","atta

Struts2:在 Action 中访问 WEB 资源

1.什么是 WEB 资源? HttpServletRequest.HttpSession.ServletContext 等原生的 Servlet API. 2.为什么访问 WEB 资源? B/S 的应用的 Controller 中必然需要访问 WEB 资源(向域对象中读写属性.读写Cookie.获取 realPath 等) 3.如何访问? 1).和Servlet API 解耦的方式:只能访问有限的 Servlet API 对象,且只能访问有限的方法.(使用 ActionContext .实现 X

UI中的界面之间的值传递 &lt;二&gt;

从后往前传 —— 代理传值 代理传值 (代理是前一个界面, 协议在后一个界面写, 后一个界面是委托方, 前一个界面是被委托方.) 一 : 在后一个界面定义协议 (定义一个用于传值的方法, 而且方法必须要有参数, 参数类型要与所传数据的类型保持一致) 二 : 在后一个界面定义代理属性, 用来保存代理对象. 三 : 设置后一个界面的代理 -- 在前一个界面进入后一个界面之前, 设置前一个界面为后一个界面的代理. 四 : 前一个界面服从协议. 五 : 前一个界面实现协议中的方法. 六 : 后一个界面让

HTML JS获取到table中所有的input的值 传递到前端

1.获取table对象 2.行循环.列循环然后遍历每一个格子里面的input值 3.用连接符连接 4.放置到form的隐藏域里面. 5.传递到后台. js代码:注意:1.input必须跟[0]否则无法取出值  2.在JS的双引号里面不能在用""改成''而且{}在引号里也会被识别报错.将字符串传回后台处理即可 function GetInfoFromTable() { var tableInfo = ""; var tableObj = document.getEle

UI中的界面之间的值传递 &lt;一&gt;

一. 从前往后传 —— 属性传值 1< 在后面一个界面定义属性(属性的类型要和传输的数据的数据类型一致). 2< 在从前一个界面进入到下一个界面之前, 将数据传给下一个界面. 例如有两个视图控制器: FirstViewController 和 SecondViewController 在这两个视图控制器中设置一个textField 和 label, 并且把FirstViewController的view上的textField上输入的text显示到SecondViewController的lab

struts2使用注解--ACTION中的应用

1.在类中指定包:@ParentPackage("system").其中system是在struts.xml中定义的包名.2.配置文件--->注解2.1配置文件方式(返回json):<action name="loadUserTree" class="userAction" method="loadUserTree">  <result type="json"><para