SSH入门系列 2 :前后端数值传递

前后端数值传递主要分为两个方向,第一个方向是从前端传递数值到后端 ,第二个方向是从后端传递数值到前端。

我先说第一个方向,从前端传递数值到后端:jsp页面如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib  uri="/struts-tags"   prefix="s"  %>
<!DOCTYPE  >
<html>
<head>
<meta charset=UTF-8/>
<title>用户增加页面</title>
</head>
<body>
<form   action ="myuser/User_add!add"  method="post">
账号:<input type="text"  name="user.username"/>
密码:<input type="password"  name="user.password" />
<input type="submit"  value="提交">
</form>
</body>
</html>

form 里面 action="myuser/User_add!add"  myuser是struts.xml 里面的namepace   User_add表示传递的action名称,!add 表示里面的add方法。这里name="user.**"是因为在后台里面传入的是User  user参数,如果直接写name ="name"  name="passwprd"会有空指针的问题。

在后端model,action 里面定义username 和password 并get  set方法,这样就能顺利把前端数据传递到后端了。

 

随后讨论如何从前端获取后台的数据:

首先action必须访问servlet API ,通常是通过HttpSession  HttpServletRequest SerlvetContext 分别对应jsp的内置对象:session  request application  ,Struts2提供了ActionContext类来进行servlet API的访问。具体方式有如下几种:

1如果变量是Action里面的全局变量,并且定义了setter方法,此时不需要其他操作,数值只要存在就可以在前端取得,具体有如下几种:

1用<%=request.getParameter("username")%>,或者<%=request.getAttribute("username");  %>

2使用EL 表达式:${username}

3采用struts2标签:<s:property  value="username" />

4OGNL表达式:<s:property value="#request.username"/>

建议采用第二第三种方式。

2如果是方法体里面的局部变量,可以放在request或者session里面,一般选择request传递

a利用ActionContext().put方法

Action部分代码如下:

   ActionContext ac = ActionContext.getContext();
    ac.put("box",username);

在前端页面做如下接受

1:使用java代码 :<%=request.getAttribute("box");  %>不推荐

2:EL表达式:${box}

3:Struts标签:<s:property  value="box">

如果参数比较多,是以类似集合形式传过来,可以用<s:iterator>进行输出代码如下:

<s:iterator value="box" id="li">
用户名:<s:property value="#li.username" />
密码:<s:property value="#li.password" />
    </s:iterator>

3:OGNL表达式:<s:property    value="#request.box"/>

 

b利用ActionContext的get方法.

Action 页面如下设置:

Map request = (Map)ActionContext.getContext().get("request")

request.put("box",username);
取值方式如a所描述

c利用HttpServletRequest 进行setAttribute传递

Action部分代码如下;

public String list(){
    userList = userService.list(user ,user.getId());
    HttpServletRequest  request = ServletActionContext.getRequest();
   request.setAttribute("userList", userList);  
    return "list";
}

在前端页面进行接收:

1利用java代码  getAttribute,参考代码如下:

    List<User > list =  (List<User>)request.getAttribute("userList");  
     out.print(list.get(0).getUsername());
     out.print(list.get(0).getPassword());

这里jsp注意导入包,

<%@ page import= "java.util.*"
         import = "com.model.User" %>

 

2使用EL表达式,

比如:<c:forEach />里面输出:

<c:forEach    var="user"  items="${userList }">  

用户名:${user.username }
<br/>
 密码:${user.password }
 </c:forEach>

在使用前,要注意引入包standard.jar和jstl.jar。还有页面的导入信息:

 <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

如果报According to TLD or attribute directive in tag file, attribute value does not accept any expressions 这个错误,就把第一个uri 改成:

 <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>

 

3OGNL表达式:<s:property value="#request.user.username  "/>

Session部分利用 ActionContext.getContext().getSession();接下来与上面类似,不在重复。

转载于:https://my.oschina.net/u/3533686/blog/1034546

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值