求jsp中OGNL表达式,select标签的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求jsp中OGNL表达式,select标签的用法相关的知识,希望对你有一定的参考价值。

action中有一个属性String:pname.
application 中有一个List<String>:pnames.
想要实现的功能:
在jsp页面中用select标签显示panmes中的所有内容,默认选择与pname相等的那个。
我开始用java代码
<select name="pname">
<%
List<String> pnames = (List<String>)application.getAttribute("pnames");
for(String name:pnames)
String flag = "";
[color=#FF0000]if(name.equals(<s:property value="pname">))[/color]
flag = "selected";

%>
<option value="<%= name %>" <%= flag %>><%= name %></option>
<%

%>
</select>

但这是不行的,java代码中不能混入struts2标签(红色部分),而且即使可用逻辑上也不合理。
求用OGNL实现上述功能,请高人指点。

终于解决你的问题了。因为OGNL和JSTL表达式不能嵌套使用,我的解决方法是使用JSP的自定义标签。下面是我自己写的JSP标签代码(放在/WEB-INF/tags目录下):

<%@ tag pageEncoding="UTF-8"%>
<%@ attribute name="username"%>
<%@ attribute name="name1"%>

<%
String str="SELECTED";
String username=(String)request.getAttribute("username");
String name1=(String)request.getAttribute("name1");
if(username.equals(name1))
%>
<%out.print(str);%>
<%%>

下面是测试页面的代码:
<%@ page language="java" contentType="text/html; charset=GBK"%>
<!-- 引入自定义标签和struts2标签 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags"%>

主体代码为:
<select name="pname">
<s:iterator value="#attr.pnames" status="st" id="name1">
<option <tags:iterator username="$username" name1="$name1"/>
value=<s:property value="#st.count" />>
<s:property value="name1" />
</option>
</s:iterator>
</select>

属性名我用的username即是你说的在后台定义pname。下面是我测试结果的页面代码:
<html>
<head>
<title>欢迎</title>
</head>
<body>
<select name="pname">
<option value=1>
qqq
</option>
<option value=2>
aaaaaaa
</option>
<option value=3>
bbbbbbb
</option>
<option SELECTED value=4>
ddddddd
</option>
<option value=5>
ccccccc
</option>
</select>
</body>
</html>
上面实现在IE6中测试成功,但是在Firefox中测试不成功,页面代码依然是上面代码,但是firefox不自动选择默认项
参考技术A select标签
生成HTML 下拉选框
属性 数据类型 描述
list 集合 为下拉选项提供数据
listKey String 集合中元素Bean的属性用于选项的value
listValue String 集合中元素Bean的属性用于选项的文本
multiple Boolean 是否多选
size String 显示条数
<s:select name="pname" list="$pnames" listKey="pname" listValue="pname" ></s:select>追问

$是EL表达式,根本不对。struts标签当中怎么能这么写!语法都不通过

参考技术B 我只在struts2中用过ognl表达式!追问

这个方案我一开始采用的,之所以有这个提问就是不想把pname放在request里或session里。不过你这么辛苦,分给你吧

ognl表达式注意事项

 

1、在jsp页面中:
<s:a action="departmentAction_delete.action?did="></s:a>
说明:
   1、struts2的标签只能跟ognl表达式. (符号"#,%")
   2、html标签只能跟el表达式.(符号"$"
   3、在struts2的标签中:
   1、s:property中的value属性
   2、s:iterator中的value属性
   3、s:select中的value属性
以上这些属性都直接能跟ognl表达式寻找相应的数据
2、s:textfield,s:a中的action等都不能直接跟ognl表达式
    <s:textfield name="aa" value="aa"/>
  上述的标签的值为"aa"
    <s:textfield name="aa" value="%{aa}"/>
上述标签中的值为对象栈中key值为aa的所对应的value值

 

以上是关于求jsp中OGNL表达式,select标签的用法的主要内容,如果未能解决你的问题,请参考以下文章

OGNL是啥意思?

ognl表达式和s标签儿

ognl表达式注意事项

OGNL

Struts2的标签库——OGNL表达式

[刘阳Java]_MyBatis_动态SQL标签用法_第7讲