中易网

struts2 的action 怎么向页面传值?

答案:5  悬赏:0  
解决时间 2021-03-20 17:53
我是菜鸟,希望能详细点.提前谢谢大家了!!不是action 获得 页面的对象.而是页面 获得 action 中的对象啊..
最佳答案
这很容易。
首先我们来写一个Action类:
public class LoginAction{
public String execute(){
return SUCCESS;
}
public void setValue(SomeBean value){
this.value=value;
}
public SomeBean getValue(){
return this.value;
}
private SomeBean value;
}
再写出Bean类:
public class SomeBean{
public String getName(){}
public void setName(String name){}
}
配置Action应该不用说了,没什么特别的,不会就上网查吧。
我们现在说方法。
方法一:
使用OGNL表达式。你可以使用struts自带的标签,他们都支持OGNL,比如s:property。举个例子:
<!--test.jsp-->
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="value.name"/>

你访问LoginAction的时候s:property标签就会显示getValue().getName();
如果你想了解更多的struts2标签和OGNL表达式建议去找更详尽的资料。
方法二:
当然是使用JSP本身的性质了。通过request和session来获取值。
我们把Action类改一下:
public class LoginAction{
public string execute(){
SomeBean value=new SomeBean();
value.setName("sfsfjsfje");
ActionContext context=ActionContext.getContext();
//往request里放attribute
context.put("value",value);
//往session里放
context.getSession().put("value",value);
return SUCCESS;
}
}
接下来我们改页面:
<!-- test.jsp -->
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%= ((SomeBean) request.getAttribute("value")).getName() %>
<%= ((SomeBean) session.get("value")).getName() %>
就这些,没什么难度。
全部回答
如果你不用struts2,你会怎么样传值呢? 方法相似:获得request对象 HttpServletRequest request= ServletActionContext.getRequest(); request.setAttribute("list"); 页面get就可以了。
action向jsp传值的方法有三种: 1.用request.setAttribute()方法,不过只适用于请求转发,不可用于重定向 2.用session.setAttribute()方法 3.用struts2标签,在Java类中定义这个值对象,然后赋值,并且给出setter和getter方法,在jsp页面中,使用 <s:property value=""/>来获取
在Action类中获得HttpServletResponse对象的四种方法 在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request。而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得HttpServletResponse或HttpServletRequest对象了。 但在Struts2 Action类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。 【方法1】使用Struts2 Aware拦截器 这种方法需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口,代码如下: package action; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; import org.apache.struts2.interceptor.*; public class MyAction extends ActionSupport implements ServletResponseAware { private javax.servlet.http.HttpServletResponse response; // 获得HttpServletResponse对象 public void setServletResponse(HttpServletResponse response) { this.response = response; } public String execute() throws Exception { response.getWriter().write("实现ServletResponseAware接口"); } } 在上面的代码中,MyAction实现了一个ServletResponseAware接口,并且实现了setServletResponse方法。如果一个动作类实现了ServletResponseAware接口,Struts2在调用execute方法之前,就会先调用setServletResponse方法,并将response参数传入这个方法。如果想获得HttpServletRequest、HttpSession和Cookie等对象,动作类可以分别实现ServletRequestAware、SessionAware和CookiesAware等接口。这些接口都在org.apache.struts2.interceptor包中。 如果要获得请求参数,动作类可以实现org.apache.struts2.interceptor. ParameterAware接口,但如果只想判断某个参数是否存在,也可以实现com.opensymphony.xwork2.interceptor. ParameterNameAware接口。这个接口有一个acceptableParameterName方法,当Struts2获得一个请求参数时,就会调用一次。读者可以在这个方法中将所有的请求参数记录下来,以便以后使用。这个方法的定义如下: boolean acceptableParameterName(String parameterName); 【方法2】使用RequestAware拦截器 这种方法和第1种方法类似。动作类需要实现一个org.apache.struts2.interceptor.RequestAware接口。所不同的是RequestAware将获得一个com.opensymphony.xwork2.util.OgnlValueStack对象,这个对象可以获得response、request及其他的一些信息。代码如下所示: package action; import java.util.Map; import org.apache.struts2.*; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; import com.opensymphony.xwork2.util.*; import org.apache.struts2.interceptor.*; public class FirstAction extends ActionSupport implements RequestAware { private Map request; private HttpServletResponse response; public void setRequest(Map request) { this.request = request; } public String execute() throws Exception { java.util.Set<String> keys = request.keySet(); // 枚举所有的key值。实际上只有一个key:struts.valueStack for(String key: keys) System.out.println(key); // 获得OgnlValueStack 对象 OgnlValueStack stack = (OgnlValueStack)request.get("struts.valueStack"); // 获得HttpServletResponse对象 response = (HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE); response.getWriter().write("实现RequestAware 接口"); } } 我们也可以使用StrutsStatics.HTTP_REQUEST、StrutsStatics.PAGE_CONTEXT来获得HttpServletRequest和PageContext对象。这种方法有些麻烦,一般很少用,读者可以作为一个参考。 【方法3】使用ActionContext类 这种方法比较简单,我们可以通过org.apache.struts2.ActionContext类的get方法获得相应的对象。代码如下: HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST); 【方法4】使用ServletActionContext类 Struts2为我们提供了一种最简单的方法获得HttpServletResponse及其他对象。这就是org.apache.struts2.ServletActionContext类。我们可以直接使用ServletActionContext类的getRequest、getResponse方法来获得HttpServletRequest、HttpServletResponse对象。代码如下: HttpServletResponse response = ServletActionContext.getResponse() response.getWriter().write("hello world"); 从这四种方法来看,最后一种是最简单的,读者可以根据自己的需要和要求来选择使用哪一种方法来获得这些对象。
struts2框架会自动将action中getxxx()形式的xxx属性放在valuestack中,所以页面上通过struts2标签直接取属性即可. 改成即可
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
从华府新桃园到三桥大明宫坐什么车
奇迹暖暖一一风荷举怎么搭配 一一风荷举高赞
想办一个国家承认的大专学历,最快要多久
镇原县职业农民培训基地地址在什么地方,我要
承德在哪看牙医正规价格也合适?有去看过的吗
76÷?+38=57
陕西省商南县距离山西大同县有多远的
听说美素佳儿金装妈妈奶粉不错,哪里有卖的呢
房屋装修 暖气片应该什么时候安装
安溪荣江茶庄地址在哪,我要去那里办事
西安哪里有卖加菲猫
wt文档怎么整空体字
几时可以看到《命中注定我爱你》的大结局
250kw发电机租赁价格
宜妻是什么意思
推荐资讯
有没有宁波地区想领养萨摩耶的!
想增肥吃啥最快?
气垫BB霜哪个牌子好?
听说用84洗白色衣服不会变黄,怎么正确使用84
问道男女结拜谁能帮想个好名字?前面2个字中见
在小区里开个汗蒸房需要多少钱
茌平贴吧信发电力工程公司拖欠工资
龙尚影视地址好找么,我有些事要过去
钻石在阴雨天会发光吗
持光大信用卡还能申请光大信用卡吗?额度是共
迈锐宝2017款跟xl是不是一样的外观
洋白菜包饺子用不用先用盐杀一下啊
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?