終于解決你的問題了。因為OGNL和JSTL表達式不能嵌套使用,我的解決方法是使用JSP的自定義標簽。下面是我自己寫的JSP標簽代碼(放在/WEB-INF/tags目錄下):
成都創(chuàng)新互聯(lián)業(yè)務包括:成品網站、企業(yè)產品展示型網站建設、品牌網站設計、電子商務型網站建設、成都外貿網站建設公司(多語言)、購物商城網站建設、定制開發(fā)、成都全網營銷推廣等。效率優(yōu)先,品質保證,用心服務是我們的核心價值觀,我們將繼續(xù)以良好的信譽為基礎,秉承穩(wěn)固與發(fā)展、求實與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質的互聯(lián)網服務!
%@ 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
上面實現(xiàn)在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表達式,是需要自己實現(xiàn)的,比如Struts2自己的OGNL表達式,或是Spring的SPEL表達式,他們都是通過Java代碼實現(xiàn)的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的腳本段。先看一般是如何顯示數(shù)據(jù)吧,最后在介紹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代碼"一類的東西看看,這是基礎。
你說的靜態(tài)類應該是指類中包含靜態(tài)域吧,除了內部類可以是靜態(tài)的外,別的類都不行。不論是靜態(tài)域還是普通域,用上面的腳本段都可以搞定。
再看看struts,靜態(tài)的顯示我放在后面了:
首先我們來寫一個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應該不用說了,沒什么特別的,不會就上網查吧。
我們現(xiàn)在說方法。
方法一:
使用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也可以顯示靜態(tài)域:
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中調用數(shù)據(jù)也很容易:
!-- 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中就有相應的數(shù)據(jù)了。