【急】struts2里面怎么设置request.setAtrribute("user",user)
我在Action里面怎么用request设置属性值,然后在jsp里面用el或者jstl获取呢?
Action:
public execute(){
HttpServletRequest request = ServletActionContext.getRequest();
request.setAtrribute("user",user);//user是一个对象,它有username和password两个属性;
}
jsp:
<%@ page type="text/html" import="java.util.*" encoding="gb2312"%>
<html>
<head><title>测试</title></head>
<body>
${user.username}<!--用el表达式获取request传过来的属性值-->
</body>
</html>
这样肯定是获取不到的,我试过,也查了挺多资料的,可是最终还是没弄明白,听说不能这么设置,要什么ValueStack,没搞懂,请哪位大虾指教一下,意思就是说在struts2.x的Action里面怎么样设置类似用servlet里面一样用request传递属性值的?非常感谢了!(谁的答案好,就给谁高分)
------解决方案--------------------页面:
<input name="user.name" type="text"/>
....
action:
有user属性的set和get的方法,当请求到这个actin的时候,struts2会帮你封装好,你只要在
action中有set和get方法就行了。获取时用user.getxxx()就可以了。。
然后做你要的处理。。。
------解决方案--------------------<%@ page language="java" isELIgnored="false" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
引入表达式语言(EL)
JSP 2.0的一个主要特点是它支持表达语言(expression language)。JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流程和循环控制功能。自制标记也有自定义函数的功能,因此基本上所有seriptlet能实现的功能都可以由JSP替代。在JSP 2.0中,建议尽量使用EL而使JSP的格式更一致。
在web.xml的<jsp-property-group>中可以控制一组JSP是否使用EL,在每个JSP中也可以指定是否该JSP使用EL。在page directive中的isELIgnored属性用来指定是否忽略。格式为:
<%@ page isELIgnored="true|false"%>
如果设定为真,那么JSP中的表达式被当成字符串处理。比如下面这个表达式<p>${2000 % 20}</p>在isELIgnored="true"时输出为${2000 % 20},而isELIgnored="false"时输出为100。Web容器默认isELIgnored="false"。
虽然JSP 2.0可以使JSP中完全使用表达语言而避免scriptlet,在实际编程中,应该根据程序的功能要求和编程人员的自身条件选择合适的方式。使用表达语言的JSP比较方便规整,但是由于需要将标记进行转换,在第一次被调用时会比较慢;有些编程人员由于对Java比较了解,因而更习惯JSP 1.2之前的编程方式,因此,在使用中应因地制宜地选择适用的编程方法。
------解决方案--------------------LZ的写法100%能取到。
------解决方案--------------------在Action中定义:
private User user;
user有get/set方法。
EL取值:
${user.username}
struts2取值:
<s:property value="user.username" /> //从ValueStack中取值
或
<s:property value="#user.username" /> //从Request中取值
------解决方案--------------------你在action里面有request.setAttribute()
那你在页面的时候就可以有一个request.getAttribute() 这样是可以取到的
------解决方案--------------------ServletActionContext.getRequest().setAttribute("list", list);
在页面端是不能用EL表达式直接取集合里对象的属性的,必须要选遍历出来集合,然后通集合里对象用点导航取对象的属性
request = ServletActionContext.getRequest();
session = ServletActionContext.getRequest().getSession();
struts2提供了这样一个静态的类,可以直接获取request,session.....
FORM:QQ群Java 2 Enterprise Edition(88509302)
------解决方案--------------------你那样写是可以的,设值也没有问题,如果在页面端取不到值的话可能跟你的项目环境有关,EL表达式要jsp2.0的版本才可以使用的,先在页面端通过java代码打印一下,是否是EL表达式的问题
<%
User user = (User)request.getAttribute("user",user);
System.out.println(username=" +user.getUsername());
%>
要在页面导入User这个类,如果打印出来有值的话,就说明了在request放值是没有问题的
然后就找下你的web.xml文件,看下头文件,如果头文件是web-app_2_3.xsd是不能用EL表达式的,你把web.xml文件删了,另外建一个新的项目建项目的时候J2EE版本选最高的,如果IDE没有最高版本的可以找我49871320,用EL表达式之前一定要保证web.xml文件的头文件是web-app_2_4.xsd或者web-app_2_5.xsd的版本
FORM:QQ群Java 2 Enterprise Edition(88509302)