現(xiàn)在看看Struts2的例子:這是Strust2 showcase例子 <%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Test</title>
</head>
<body>
<center><br>
<br>
<br>
<hr>
<br>
<br>
<s:form action="test_showPost" method="post" theme="simple">
<table>
<tr>
<td><s:select
list="{'Windows','Linux','Java','.net','Pertl','PHP'}"
name="program" tooltip="select your program" /></td>
</tr>
<tr>
<td><s:select list="posts" name="post.post_name"
listKey="post_name" listValue="post_name" headerKey="0"
headerValue="請(qǐng)選擇你的職位" required="true"></s:select></td>
</tr>
<tr>
<td><s:checkboxlist name="skills1" label="Skills 1"
tooltip="bulktree" list="{'Java', '.Net', 'RoR', 'PHP' }"
value="{'Java', '.Net' }" /></td>
</tr>
<tr>
<td><s:checkboxlist name="skills2" label="Skills 2"
tooltip="bulktree" list="#{1:'Java', 2:'.Net', 3:'RoR', 4:'PHP' }"
listKey="key" listValue="value" value="{1, 2, 3 }" /></td>
</tr>
<tr>
<td><s:doubleselect label="doubleselect test1" name="menu"
list="{'fruit','other'}" doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
</td>
</tr>
<tr>
<td><s:updownselect label="Favourite Countries"
list="#{'england':'England', 'america':'America', 'germany':'Germany'}"
name="prioritisedFavouriteCountries" headerKey="-1"
headerValue="--- Please Order Them Accordingly ---"
emptyOption="true" /></td>
</tr>
<tr>
<td><s:optiontransferselect
tooltip="Select Your Favourite Cartoon Characters"
label="Favourite Cartoons Characters"
name="leftSideCartoonCharacters" leftTitle="Left Title"
rightTitle="Right Title" list="{'Popeye', 'He-Man', 'Spiderman'}"
multiple="true" headerKey="headerKey"
headerValue="--- Please Select ---" emptyOption="true"
doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}"
doubleName="rightSideCartoonCharacters"
doubleHeaderKey="doubleHeaderKey"
doubleHeaderValue="--- Please Select ---" doubleEmptyOption="true"
doubleMultiple="true" /></td>
</tr>
<tr>
<td><s:submit></s:submit></td>
</tr>
</table>
</s:form></center>
</body>
</html>
注意:上面的代碼不需要用table布局,Struts2內(nèi)置了表格功能,run顯示如下:
上面的代碼都是一些簡(jiǎn)單的值顯示,實(shí)際的開(kāi)發(fā)所出現(xiàn)的數(shù)據(jù)都不是現(xiàn)成的。大家可能注意了這段代碼:
<tr>
<td><s:select list="posts" name="post.post_name"
listKey="post_name" listValue="post_name" headerKey="0"
headerValue="請(qǐng)選擇你的職位" required="true"></s:select></td>
</tr>
下來(lái)就來(lái)說(shuō)說(shuō)Struts2 tag怎么顯示List/Map/Set里的值:
采用POJO方式訪問(wèn) VO是一些最基本的getter/setter省略不寫(xiě)。
action代碼:
package com.bulktree.AutoOffice.action;
import java.util.List;
import java.util.Map;
import com.bulktree.AutoOffice.factory.DAOFactory;
import com.bulktree.AutoOffice.vo.Client;
import com.bulktree.AutoOffice.vo.ClientUser;
import com.bulktree.AutoOffice.vo.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
publicclass ClientUserAction extends ActionSupport {
private List<Client> clients;
private List<User> users;
public List<Client> getClients() {
returnclients;
}
publicvoid setClients(List<Client> clients) {
this.clients = clients;
}
public List<User> getUsers() {
returnusers;
}
publicvoid setUsers(List<User> users) {
this.users = users;
}
public String queryClientID() throws Exception {
Map session = ActionContext.getContext().getSession();
String userid = (String)session.get("userid");
setUsers(DAOFactory.getEmployeeInstance().queryUidUserid());
setClients(DAOFactory.getClientInstance().queryByAll(userid));
returnSUCCESS;
}
}
下面是用來(lái)測(cè)試上面action的jsp頁(yè)面:分別使用了<s:select/> <s:doubleselect /> <s:updownselect />來(lái)接收List集合里的值
<s:form action="clientuser_changeClient" method="post">
<s:doubleselect list="clients" name="client.client_id"
listKey="client_id" listValue="client_id"
doubleName="client.client_name" doubleList="clients"
doubleListKey="client_name" doubleListValue="client_name" />
<s:updownselect label="All Clients ID" tooltip="show all clients"
list="clients" headerKey="0" headerValue="--所有客戶編號(hào)--"
listKey="client_id" listValue="client_id" emptyOption="true"
moveUpLabel="向上" moveDownLabel="向下" selectAllLabel="全選" />
<s:updownselect label="All Clients name" tooltip="show all clients"
list="clients" headerKey="0" headerValue="--所有客戶姓名--"
listKey="client_name" listValue="client_name" moveUpLabel="向上"
moveDownLabel="向下" selectAllLabel="全選" emptyOption="true" />
<s:select list="clients" name="clientuser.client_id"
tooltip="Change Your Client" label="選擇你將要轉(zhuǎn)讓的客戶" listKey="client_id"
listValue="client_id" required="true" />
<s:select list="users" name="clientuser.userid" label="將要轉(zhuǎn)讓給同事"
tooltip="Choose your partner" listKey="userid" listValue="userid"
required="true" />
<s:submit value=" 確認(rèn)轉(zhuǎn)讓 " onclick="alert('轉(zhuǎn)讓后你就失去了該客戶');" />
</s:form>
說(shuō)說(shuō)最簡(jiǎn)單的<s:selelct />其他的以此類推:
·select標(biāo)簽必須屬性只有一個(gè)為L(zhǎng)ist
·select一定要有值,否則出錯(cuò)。如果我們?cè)趆tml中使用select時(shí)會(huì)有個(gè)默認(rèn)的值,在Struts2中也是一樣的,如果List,沒(méi)有值可以加上headerKey,headerValue就可以通過(guò)。
·List屬性的值在Action中定義,必須為一個(gè)迭代的List/Map/Set,本例采用List
· listKey對(duì)應(yīng)html表單select中的value,listValue對(duì)應(yīng)html表單中的option
·List/Set的listKey和listValue是一樣的
·如果是Map,則map的key對(duì)應(yīng)key,map的value對(duì)應(yīng)value
如下代碼:
<s:select list="clients" name="clientuser.client_id"
tooltip="Change Your Client" label="選擇你將要轉(zhuǎn)讓的客戶" listKey="client_id"
listValue="client_id" required="true" />
Clients為action中l(wèi)ist的對(duì)象,也就是getter/setter方法的名字,Struts2支持POJO訪問(wèn),listKey的值”client_id”則為VO對(duì)象 (client)的屬性(client_id)(Struts2支持OGNL)我們還可以加上headerKey和headerValue用以顯示首行的提示,大家可以加上試試,注意:headerKey的值不能為-1否則編譯不能通過(guò)。
<s:doubleselect />和<s:select />運(yùn)行機(jī)制是一樣的,不同的就是<s:doubleselect />顯示的是兩個(gè)list/doubleList的值,doubleList的值牽制于list的值,它的內(nèi)部實(shí)現(xiàn)機(jī)制是采用JavaScript
<s:doubleselect list="clients" name="client.client_id"
listKey="client_id" listValue="client_id"
doubleName="client.client_name" doubleList="clients"
doubleListKey="client_name" doubleListValue="client_name" />
這個(gè)<s:doubleselect />是有問(wèn)題的,只是為了演示有值,但是沒(méi)有真正起到doubleselect的作用,doubleList是按編號(hào)取值的,doubleList對(duì)應(yīng)Map中一個(gè)key的value。采用本例的話可以把這樣做:
Map<Integer, List<clients>> maps = new HashMap<Integer, List<clients>>();
maps.put(1, clients);
maps.put(2, clients);
maps.put(3, clients);
maps的key為第一級(jí)下拉列表的listKey,top為client的實(shí)例
<s:doubleselect list="clients" name="client.client_id"
listKey="id" listValue="client_id"
doubleName="client.client_name" doubleList="maps.get(top. id)"
doubleListKey="client_name" doubleListValue="client_name" />