我們通常在action中需要向jsp頁面中傳入背景值,我們以前使用的是比較傳統的方法用el運算式例如:${requestScope.value},但是,業務的多變我們又是不得不用另外的方式傳入值到jsp頁面,已達到我們想要的效果。
1.以前yoyo在上課的時候講的那種用:ServletActionContext.getRequest().setAttribute("key","value");先放在request中,然後到頁面用${requestScope.key}這種el運算式也是一種方法。
2.可以在action中直接定義要傳入前台的屬性,然後getter and setter 如:
public class testAction extends ActionSupport {
public String execute() throws Exception {
userinfo=this.userinfoDao.getuserinfo();
System.out.println(userinfoList.get(0).get("USER_ID"));
return "success";
}
private Userinfo userinfo;
getter ......
setter......
}
這是可以再前台直接去到userinfo的屬性,就不用再action中再ServletActionContext.getRequest().setAttribute(" userinfo ", userinfo );
然後到頁面上用el運算式了<input type="text" value="userinfo.userid ">可吧userid的值放入文字框中。
3.我們還有一種從action中傳入值到jsp頁面的方法:Map對象。map對象是一種索引值對的形式,我們首先在action中定義一個屬性(同2):
public class testAction extends ActionSupport {
public String execute() throws Exception {
//集合形式
userinfomaplist=OperateDbByJDBC.select("select * from userinfo");
//單條資料形式
userinfomap=OperateDbByJDBC.select("select * from userinfo where user_id=1");
return "success";
}
//集合形式
private list<Map<string,string>> userinfomaplist;
//單條資料形式
private Map<string,string> userinfomap;
getter ......
setter......
getter ......
setter......
}
我上面的OperateDbByJDBC.select()方法是一個利用sql語句進行jdbc查詢的方法,在select方法裡面我把查詢出來的資料經過處理返回Map索引值對的形式,順便,有時我們在ssh架構中hql實現不了的業務,我們可以考慮在項目架構中用兩種資料訪問形式,hql(hibernate)和sql(jdbc),這種也便於開發。
上面一點(第二點)講過只要定義一個屬性,然後getter and setter就可以直接在頁面上用,但是Map對象怎麼在jsp中取值呢。
<a 一條資料形式:用${USER_ACCOUNT}形式,因為在jdbc查詢過程中,把列名放在了map對象的key中,然後把對應的列值放在了walue中,頁面上直接用列名加el運算式 就可以把對應的value值取出。
<b 集合對象形式: 集合對象要遍曆,我們要用到核心標籤庫的<c:forech>或struts2標籤庫的<s:s:iterator>
隨便你高興用哪種。
<c:forech>(jstl標籤)遍曆一個map對象:
<c:forEach items="${ userinfomaplist}" var="userinfo" varStatus="userinfos">
//${ userinfomaplist}要遍曆的map集合
${userinfo.USER_ID} //var.列名
${userinfo.USER_ACCOUNT}
</c:forEach>
<s:iterator>(struts2標籤)遍曆一個map:
<s:iterator value="userinfoList" id="user" status="users">
${USER_ACCOUNT}
${USER_ID}
</s:iterator>
注意兩者的區別。。