struts2 value="%user.age"获取不到值得问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2 value="%user.age"获取不到值得问题相关的知识,希望对你有一定的参考价值。

我的jsp页面中有如下两行代码:
<s:textfield name="user.id" value="%user.id"></s:textfield>
<s:textfield name="user.age" value="%user.age"></s:textfield>
但是我的%user.id的值可以取到,但是%user.age的值取不到(默认的0)

我的user是从上一个action中请求转发过来的,在上一个action中可以打印出user的所有的属性,在此jsp种用request.getAttribute()获得user对象也可以打印出user的所有的属性,也就是说这个user是传过来了,但是在struts标签中取不到user的部分值(id可以取到,但是别的属性都取不到),请问这是为什么??

小弟只有5个金币了,谢谢大家

之前看视频时做的笔记,希望能帮到你:
一、OGNL Object Graph Navigation Language
a.普通
<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
<li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
<li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
<li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
<li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
<li>访问值栈中action的普通方法:<s:property value="m()" /></li>
b.访问静态
<li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
<li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
使用struts 2.1时,要访问到静态方法就必须在struts.xml中配 <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
可以参考struts2-core-2.1.6.jar包下的,org.apache.struts2里面的default.prperties
c.访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
d.访问List
<li>访问List:<s:property value="users"/></li>
<li>访问List中某个元素:<s:property value="users[1]"/></li>
<li>访问List中元素某个属性的集合:<s:property value="users.age"/></li> 大括号可以表示集合
<li>访问List中元素某个属性的集合中的特定值:<s:property value="users.age[0]"/> | <s:property value="users[0].age"/></li>
e.Set
<li>访问Set:<s:property value="dogs"/></li>
<li>访问Set中某个元素:<s:property value="dogs[1]"/></li> 访问不到,因为Set没有顺序
<li>访问Map:<s:property value="dogMap"/></li>
<li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
f.Map
<li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
<li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
<li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
g.投影
<li>投影(过滤):<s:property value="users.?#this.age==1</li> 取到的是一个集合
<li>投影(过滤):<s:property value="users.?#this.age==1[0]"/></li> 问号代表过滤条件
<li>投影:<s:property value="users.^#this.age>1.age"/></li> ^表示开始
<li>投影:<s:property value="users.$#this.age>1.age"/></li> $表示结尾
<li>投影:<s:property value="users.$#this.age>1.age == null"/></li>

二、Struts2-Tags
a.property
<li>property: <s:property value="username"/> </li>
<li>property 取值为字符串: <s:property value="'username'"/> </li>
<li>property 设定默认值: <s:property value="admin" default="管理员"/> </li> 如果有admin就有,没有就用默认值
<li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li> 是否解析HTML,默认TRUE <hr/>一条横线
<li>property 设定HTML: <s:property value="'<hr/>'"/> </li>
b.set
<li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>
<li>set 使用#取值: <s:property value="#adminPassword"/> </li>
<li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>
c.bean 定义bean,并使用param来设定新的属性值:
<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog"> 必须要有var,否则不能存放到Struts Context
<s:param name="name" value="'oudy'"></s:param> 必须加单引号,否则访问不到。加了,表示是一个字符串
<s:property value="name"/> 可以通过property 对其进行访问,如果没有var则不能在bean外访问到,原因bean一结束,就会从栈里取走。
</s:bean>
拿出值:<s:property value="#myDog.name"/>
d.include 不常用
<li>include _include1.html 包含静态英文文件
<s:include value="/_include1.html"></s:include>
</li>

<li>include _include2.html 包含静态中文文件
<s:include value="/_include2.html"></s:include>
</li>

<li>include _include1.html 包含静态英文文件,说明%用法
<s:set var="incPage" value="'/_include1.html'" />
<!--<s:set var="incPage" value="%'/_include1.html'" />-->
<s:include value="%#incPage"></s:include> %表示将里面的东西按OGNL表达式处理。
</li>
e.if elseif else
age = <s:property value="#parameters.age[0]" /> <br />
<s:set var="age" value="#parameters.age[0]" />
<s:if test="#age < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br />
<s:if test="#parameters.aaa == null">null</s:if>
</li>
f.iterator
<li>遍历集合:<br />
<s:iterator value="1, 2, 3" >
<s:property/> |
</s:iterator>
</li>
<li>自定义变量:<br />
<s:iterator value="'aaa', 'bbb', 'ccc'" var="x"> 定义变量
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
</li>
<li>使用status:<br />
<s:iterator value="'aaa', 'bbb', 'ccc'" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>

</li>

<li>
<s:iterator value="#1:'a', 2:'b', 3:'c'" > 定义Map时要加一个#
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
</li>

<li>
<s:iterator value="#1:'a', 2:'b', 3:'c'" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
</li>
参考技术A 语法不对!要用ognl的语法

struts2的if标签用法

如下:
<s:iterator value="userList" var="user" status="sta">
<tr class="listTitle" bordercolor="#993333">
<td width="100" heighi="28"><s:property value="#sta.getCount()"/></td>
<td width="100" height="28" ><s:property value="#user.userName"/></td>
<td width="80" height="28" ><s:property value="#user.userType"/></td>
<td width="120" height="28" ><s:property value="#user.userTimeTo"/></td>
<td width="120" height="28" ><s:property value="#user.userIsDownLicense"/></td>
<td width="220" height="28" ><a href="#">维护</a> <a href="#">冻结</a></td>
</tr>
</s:iterator>
这是我的迭代标签使用,现在我数据库中搜索出来的都是数字,比如说当我的value的值为2的时候,我要显示的是“账户冻结”请问用if标签怎么做?

参考技术A <s:if text="#user.value == 2">
账户冻结
</s:if>
<s:if text="#user.value == 3">
xxx
</s:if>
这个随便写本回答被提问者采纳
参考技术B <s:if test="#user.属性字段== '2' >
冻结
</s:if>
<s:else>
。。。
</s:else>

就这样子就行了,不懂欢迎追问!
参考技术C <s:if text="#user.value == 2">
<a href="#">账户冻结</a>
</s:if>
<s:if text="#user.value !=2 ">
<a href="#">看你想写什么</a>
</s:if>

可以写多个if最后只显示符合条件的

建议你使用el表达式 :
<c:if test="$user.userType == 2"> <a href="#">账户冻结</a></c:if>
。。。。
参考技术D <c:if test="$user.userType == 2">账户冻结</c:if> 这个是对数字类型的
<c:if test="$fn:trim(feeinfo.prefeedate) .eq '2'">账户冻结</c:if> 这个是对字符类型的
第5个回答  2012-08-10 <c:if test="$user.value==2">账户冻结</c:if>

以上是关于struts2 value="%user.age"获取不到值得问题的主要内容,如果未能解决你的问题,请参考以下文章

Struts2 全局结果集

Struts2 动态结果集

struts2标签

spring整合struts2的两种方式区别

用struts2 迭代标签同时迭代两个list

struts2的if标签用法