Jsp页面访问Action中的值

首先我们了解一下Action:其功能与Servlet相同,主要负责请求的处理和响应及Request和Response,只不过其继承的父类不同罢啦。

原理:当Struts2接收到请求以后,就会创建相应的Action的实例来处理请求,Action会从数据库读取请求的相应记录,并把这些信息保存到自己的属性中,而Struts2又会把这个Action保存到值栈中,以供OGNL访问。

例:

 UpdateHouse代码:

package com.cn.action;


import java.text.SimpleDateFormat;
import java.util.Date;


import org.apache.struts2.ServletActionContext;


import com.cn.entity.House;
import com.cn.service.UserService;


public class UpdateHouse extends BaseAction {
/**
* 更新信息
*/
private static final long serialVersionUID = -3353758218527815967L;
private UserService userService;
private House updateHouse;
private House house;
private String mag;

public String execute() throws Exception {
int id = Integer.parseInt(this.request.getParameter("id")); 
updateHouse = this.userService.findHouse(id);
//ServletActionContext.getRequest().setAttribute("housePage", house);
this.request.setAttribute("housePage", updateHouse);
return SUCCESS;
}
public String updateHouseInf(){
try{
int id = Integer.parseInt(this.request.getParameter("id"));
house.setId(id);
house.setPublishtime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
int i = this.userService.updateHouse(house);
if(i==1){
mag = "修改成功";
}else{
mag = "修改失败";
}
}catch(Exception e){
mag = "修改失败";
}
this.request.setAttribute("message", mag);
return SUCCESS;
}

public void setUserService(UserService userService) {
this.userService = userService;
}

public UserService getUserService() {
return userService;
}

public House getUpdateHouse() {
return updateHouse;
}


public void setUpdateHouse(House updateHouse) {
this.updateHouse = updateHouse;
}

public House getHouse() {
return house;
}

public void setHouse(House house) {
this.house = house;
}

public String getMag() {
return mag;
}

public void setMag(String mag) {
this.mag = mag;
}
}

UpdateHouse接收请求并调用execute()方法处理请求后,属性updateHouse中保存了从从数据库读取的信息,那么该属性就会被存入值栈中。可以通过<s:dubug>标签来验证是否已经存入值栈啦。

housePage.jsp代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
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><title>查看值栈</title></head>

  <body>

<s:debug></s:debug>

  </body>

</html>

<action>的配置

 <package name="house" namespace="/house" extends="struts-default">

<action name="gotoHouse" class="com.cn.action.UpdateHouse">

<result>/housePage.jsp</result>

</action>

</package>

可以发现,UpdateHouse对象被存入了值栈,该对象的updateHouse属性在值栈中也能找到。。

如果需要把值栈中的内容显示在JSP页面上,就需要使用OGNL表达式了。如:

<s:property value="updateHouse.id" />即可在页面上显示数据啦。(Action一定要有getter和setter方法,不然就获取不啦值)

下面我们再来说说访问Action以外的数据,如request,session,application等,它们存放在Stack Context中。

上面this.request.setAttribute("message", mag);的mag信息就存放在StackContext中


我们可以JSP页面用<s:property value="#request.mag" />获取值

如果能过成功跳转页面却不显示结果,那可能就是你的Action中的问题啦。


在<result>标签中不要添加type的属性即可(我就是加了一个 type="redirect"属性,改了好多地方都不显示数据,结果取啦type 就一切OK啦)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值