1. ognl和el表達式的區別
ognl和el表達式的區別
el 和ognl都是表達是語言,但語法是不一樣的,所謂表達式語言,就是輸入一串表達式,解釋器幫你求值。jstl是一套標簽庫,說白了是一套可以用在jsp頁面的標簽。jstl和el都屬於jsr的一部分。ognl則是社區一套表達式語言,最初用於webwork。
這段就是帶參數的url 相當於 hello action的URL後面加上 ?userName=Bruce+Phillips${helloLink}是EL表達式 <s:url action="hello" var="helloLink">
<s:param name="userName">Bruce Phillips</s:param>
</s:url>
實際上這段的意思是將帶參數的url字元串放到request屬性中,再通過EL把它取出來${helloLink}可以換成${requestScope.helloLink}
2. Struts2 2.5 用ognl表達式從action裡面取值,顯示在jsp頁面,為什麼不能根據性別取出對象呢看下圖
struts2中使用的OGNL表達式在拿action中的值的時候無論如何都取不到。
UserAction.java 這個類查出了一個「lists」,也就是我在jsp頁面中要取的值。
[java]view plain
packagetm.change.action;
importjava.util.ArrayList;
importjava.util.List;
importtm.change..UserDao;
importtm.change..impl.UserDaoImpl;
importtm.change.domain.User;
publicclassUserAction{
privateUserDao=newUserDaoImpl();
privateList<User>lists=newArrayList<>();
publicStringlist(){
lists=.findObject(0,2);
return"list";
}
}
list.jsp
在這個頁面上,我要取上面這個類中的lists,然後生成一張table。但是無論如何都取不到值。
[html]view plain
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>Inserttitlehere</title>
</head>
<body>
<tableborder="1px">
<thead>
<tr>
<th>姓名</th>
<th>年齡</th>
<th>郵箱</th>
</tr>
</thead>
<tbody>
<s:iteratorvar="entity"value="lists">
<tr>
<td><s:propertyvalue="name"/></td>
<td><s:propertyvalue="age"/></td>
<td><s:propertyvalue="email"/></td>
</tr>
</s:iterator>
</tbody>
</table>
</body>
</html>
原因總結:通過瀏覽了好多博客,找到了原因。
struts2採用的是映射機制,就是說你在action定義的變數通過set和get方法在頁面中是可以得到數據的也就是說如果你想要在頁面中取得action中的值的話就一定要把它定義出來,並且給他至少一個get方法,你可以吧MessageStore定義到你的action中去然後通過getMessageStore映射到頁面上然後再通過struts2的標簽提取其中的數據。
因此,我在UserAction.java中給lists 寫了一個get和set方法
果然,立刻就拿到了值。
3. jsp裡面有個很像EL表達式的#{ },是什麼表達式
OGNL表達式
構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
支持容器的構造的表達式:
例如:{"green", "red", "blue"}構造一個List,專#{"key1" : "value1", "key2" : "value2", "key3" : "value3"}構造一個Map
OGNL是Object-Graph Navigation Language的縮屬寫,它是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現欄位類型轉化等功能。它使用相同的表達式去存取對象的屬性。
4. jsp中如何生成HTML中的標簽啊比如,我想寫個for循環,在頁面上生成N個<td>...</td>的單元
通過<%%>內寫入抄java代碼即可實現,襲不過真正開發一般不這樣做,要使用EL或OGNL表達式<table> <tr> <%for(int i = 0; i < n; i++){ %> <td> </td> <% } %> </tr>
</table></p></p>
5. struts2 jsp如何獲取action值
現在jsp頁面頭部引入struts2標簽庫
<%@ taglib prefix="s" uri="/struts-tags"%>
然後再需要的地方使用
<s:property value="OGNL表達式"/>
每次請求action轉發回來後,當回前頁答面會有一個
valueStack,action里的全部信息都保存在裡面,比如你action里有個欄位username(提供的有get方法)
則你在<s:property value="username"/>就能直接取到值。
如果是對象ognl還可以支持導航<s:property value="user.username"/>
依次類推。
同時當前頁面還保存的有ActionContext(不知道怎麼翻譯...),跟valueStack一樣,也可以直接取值,但是前面要加個#號以區別。
request、application對象都在actionContext裡面,
可以這么取requst里的值
<s:property value="#request.username"/>等
6. jsp頁面根據資料庫里查詢的值,顯示不同的div。
您好,很高興為您解答,首先請你提供您所使用的框架技術,包括哪些,如果沒有使用框架,我給你提供最簡單原始的如下思路:
拿簡單的 servlet 來說:
當在頁面做 input 提交時,用戶名已經被提交到後台,當然,我們的目的是獲取work_order值,接下來控制頁面轉發回你提交的 jsp,記住轉發與重定向的區別,這里我不做過多闡述,接下來就是jsp 頁面的操作了,您可以使用腳本語言<%...%>,亦可以使用 jstl 表達式,當然,如果使用了 struts2框架等,ognl 表達式是一個完美的選擇,提供的具體思路如下:
<jstl:if test="${requestScope.work_order}==a">顯示 a div</if> <jstl:elseif test="${requestScope.work_order}==b">顯示 b div</elseif> <jstl:else test="${requestScope.work_order}==a">顯示 a div</else>
當然${requestScope.work_order}表示從 request 范圍中請求work_order參數,就是你查詢出來的