终于解决你的问题了。因为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不自动选择默认项
EL表达式取属性:
${teacher.name}OGNL表达式取属性:
#teacher.name题外:问这类问题有什么意义呢吗初学struts2的话直接用OGNL免得分心会OGNL的话EL一看就会用;用Spring
MVC的话直接用EL表达式;OGNL写法上很多时刻没EL表达式简洁但功能要比EL表达式强小我爱好EL表达式多点。极不爱好struts2的的写法还不如直接用el:${loginNames}
Java中本身没有OGNL表达式,OGNL表达式,是需要自己实现的,比如Struts2自己的OGNL表达式,或是Spring的SPEL表达式,他们都是通过Java代码实现的java中能使用ognl表达式吗
可以使用struts的ognl标签s:iterator
s:iterator var="q" value="user"
属性的话s:properpoty value="username"
或者jstl的c:foreach
c:forEach var="map" items="${list}"
属性直接用el取
网上很多相关的用法 不过建议看api
如果用了struts2最好用ognl 功能很强大
是你理解错了,看了你截图,就知道你看的是汤阳光的OA+JBPM视频。
加#号是从context中取
如果没加#号,就先从root中取,如果没取到就去context中取,所以你看到了信息
js?还是指JSP的脚本段。先看一般是如何显示数据吧,最后在介绍js:
我们可以使用JSP页面的脚本段,首先写个Bean类:
public class SomeBean{
public String getName(){return "123";}
public void setName(String name){}
}
!-- test.jsp--
%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%
%
SomeBean bean=new SomeBean();
out.println("Bean-name is "+bean.getName());
%
就是这样,脚本段里面的东西其实就是java代码,而JSP页面本质就是servlet。我不太清楚你是否了解JSP的编译,如果你不知道的话我建议你到百度搜一下"JSP的java代码"一类的东西看看,这是基础。
你说的静态类应该是指类中包含静态域吧,除了内部类可以是静态的外,别的类都不行。不论是静态域还是普通域,用上面的脚本段都可以搞定。
再看看struts,静态的显示我放在后面了:
首先我们来写一个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() %
OGNL也可以显示静态域:
public class SomeBean{
public static String name="123";
public static String getAlias(){return "abc";}
}
public class LoginAction{
public String execute(){return SUCCESS;}
}
配置文件不写了。
页面:
!--test.jsp--
%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%
%@ taglib prefix="s" uri="/struts-tags" %
!--还是用s:property--
s:property value="@SomeBean@name"/
s:property value="@SomeBean@getAlias()"/
当你访问LoginAction时就会显示SomeBean的name和getAlias()。不知道你是不是问的这个。
如果你要在js中调用数据也很容易:
!-- test.jsp --
%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%
%@ taglib prefix="s" uri="/struts-tags" %
script language="javascript" type="text/javascript"
var name="s:property value="@SomeBean@name"/";
/script
这样js中就有相应的数据了。