在struts2中,选项选择组件是两个“updownselect”选择部件在左,右侧对齐,在它们中间,包含按钮来移动自己的选择选项。通过<s:optiontransferselect>标签这可以创建。
这里创建一个web工程:strut2updownselect,来演示在多个复选框如何设置的默认值,整个项目的结构如下图所示:

<s:optiontransferselect
label="lucky numbers"
name="leftnumber"
list="{'1 - one ', '2 - two', '3 - three', '4 - four', '5 - five'}"
doublename="rightnumber"
doublelist="{'10 - ten','20 - twenty','30 - thirty','40 - forty','50 - fifty'}"
/>
产生下面的html,两个“updownselect”组件,按钮和javascript来自己动(默认的xhtml主题)之间的选择选项。
<tr>
<td class="tdlabel">
<label for="resultaction_leftnumber" class="label">lucky numbers:</label>
</td>
<td>
<script type="text/javascript" class="lazy" data-original="/struts2example/struts/optiontransferselect.js">
</script>
<table border="0">
<tr>
<td>
<select name="leftnumber" size="15"
id="resultaction_leftnumber" multiple="multiple">
<option value="1 - one ">1 - one </option>
<option value="2 - two">2 - two</option>
<option value="3 - three">3 - three</option>
<option value="4 - four">4 - four</option>
<option value="5 - five">5 - five</option>
</select>
<input type="hidden" id="__multiselect_resultaction_leftnumber"
name="__multiselect_leftnumber" value="" />
<input type="button"
onclick="moveoptiondown(
document.getelementbyid('resultaction_leftnumber'), 'key', '');"
value="v"
/>
<input type="button"
onclick="moveoptionup(
document.getelementbyid('resultaction_leftnumber'), 'key', '');"
value="^"
/>
</td>
<td valign="middle" align="center">
<input type="button"
value="<-" onclick="moveselectedoptions(
document.getelementbyid('resultaction_rightnumber'),
document.getelementbyid('resultaction_leftnumber'), false, '');" />
<input type="button"
value="->" onclick="moveselectedoptions(
document.getelementbyid('resultaction_leftnumber'),
document.getelementbyid('resultaction_rightnumber'), false, '');" />
<input type="button"
value="<<--" onclick="movealloptions(
document.getelementbyid('resultaction_rightnumber'),
document.getelementbyid('resultaction_leftnumber'), false, '');" />
<input type="button"
value="-->>" onclick="movealloptions(
document.getelementbyid('resultaction_leftnumber'),
document.getelementbyid('resultaction_rightnumber'), false, '');" />
<input type="button"
value="<*>" onclick="selectalloptions(
document.getelementbyid('resultaction_leftnumber'));
selectalloptions(document.getelementbyid('resultaction_rightnumber'));" />
</td>
<td>
<select
name="rightnumber"
size="15"
multiple="multiple"
id="resultaction_rightnumber"
>
<option value="10 - ten">10 - ten</option>
<option value="20 - twenty">20 - twenty</option>
<option value="30 - thirty">30 - thirty</option>
<option value="40 - forty">40 - forty</option>
<option value="50 - fifty">50 - fifty</option>
</select>
<input type="hidden" id="__multiselect_resultaction_rightnumber"
name="__multiselect_rightnumber" value="" />
<input type="button"
onclick="moveoptiondown(
document.getelementbyid('resultaction_rightnumber'), 'key', '');"
value="v"
/>
<input type="button"
onclick="moveoptionup(
document.getelementbyid('resultaction_rightnumber'), 'key', '');"
value="^"
/>
</td>
</tr>
</table>
<script type="text/javascript">
var containingform = document.getelementbyid("resultaction");
strutsutils.addeventlistener(containingform, "submit",
function(evt) {
var selectobj = document.getelementbyid("resultaction_leftnumber");
selectalloptionsexceptsome(selectobj, "key", "");
}, true);
var containingform = document.getelementbyid("resultaction");
strutsutils.addeventlistener(containingform, "submit",
function(evt) {
var selectobj = document.getelementbyid("resultaction_rightnumber");
selectalloptionsexceptsome(selectobj, "key", "");
}, true);
</script>
一个完整的全面的 <s:optiontransferselect> 标签例子,表明使用ognl和java列出来填充数据到“选项中选择转移”的组件。
action类来生成并存储左右选择选项。
optiontransferselectaction.java
package com.h3.common.action;
import java.util.arraylist;
import java.util.list;
import com.opensymphony.xwork2.actionsupport;
public class optiontransferselectaction extends actionsupport{
private list<string> leftantiviruslist = new arraylist<string>();
private list<string> rightantiviruslist = new arraylist<string>();
private string leftantivirus;
private string rightantivirus;
private string leftnumber;
private string rightnumber;
public optiontransferselectaction(){
leftantiviruslist.add("norton 360 version 4.0");
leftantiviruslist.add("mcafee total protection 2010");
leftantiviruslist.add("trend micro is pro 2010");
leftantiviruslist.add("bitdefender total security 2010");
rightantiviruslist.add("norton internet security 2010");
rightantiviruslist.add("kaspersky internet security 2010");
rightantiviruslist.add("mcafee internet security 2010");
rightantiviruslist.add("avg internet security 2010");
rightantiviruslist.add("trend micro internet security 2010");
rightantiviruslist.add("f-secure internet security 2010");
}
public string getleftnumber() {
return leftnumber;
}
public void setleftnumber(string leftnumber) {
this.leftnumber = leftnumber;
}
public string getrightnumber() {
return rightnumber;
}
public void setrightnumber(string rightnumber) {
this.rightnumber = rightnumber;
}
public list<string> getleftantiviruslist() {
return leftantiviruslist;
}
public void setleftantiviruslist(list<string> leftantiviruslist) {
this.leftantiviruslist = leftantiviruslist;
}
public list<string> getrightantiviruslist() {
return rightantiviruslist;
}
public void setrightantiviruslist(list<string> rightantiviruslist) {
this.rightantiviruslist = rightantiviruslist;
}
public string getleftantivirus() {
return leftantivirus;
}
public void setleftantivirus(string leftantivirus) {
this.leftantivirus = leftantivirus;
}
public string getrightantivirus() {
return rightantivirus;
}
public void setrightantivirus(string rightantivirus) {
this.rightantivirus = rightantivirus;
}
public string execute() throws exception{
return success;
}
public string display() {
return none;
}
}
通过“<s:optiontransferselect>”选项转移选择组件标签渲染,并通过java和ognl列表产生左侧和右侧选择选项。
optiontransferselect.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<s:head />
</head>
<body>
<h1>struts 2 optiontransferselect 示例</h1>
<s:form action="resultaction" namespace="/" method="post" >
<s:optiontransferselect
label="lucky numbers"
name="leftnumber"
list="{'1 - one ', '2 - two', '3 - three', '4 - four', '5 - five'}"
doublename="rightnumber"
doublelist="{'10 - ten','20 - twenty','30 - thirty','40 - forty','50 - fifty'}"
/>
<s:optiontransferselect
label="favourite antivirus"
name="leftantivirus"
lefttitle="left antivirus title"
righttitle="right antivirus title"
list="leftantiviruslist"
multiple="true"
headerkey="-1"
headervalue="--- please select ---"
doublelist="rightantiviruslist"
doublename="rightantivirus"
doubleheaderkey="-1"
doubleheadervalue="--- please select ---"
/>
<s:submit value="submit" name="submit" />
</s:form>
</body>
</html>
result.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <body> <h1>struts 2 optiontransferselect example</h1> <h2> left antivirus : <s:property value="leftantivirus"/> </h2> <h2> right antivirus : <s:property value="rightantivirus"/> </h2> <h2> left numbers : <s:property value="leftnumber"/> </h2> <h2> right numbers : <s:property value="rightnumber"/> </h2> </body> </html>
<?xml version="1.0" encoding="utf-8" ?>
<!doctype struts public
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devmode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="optiontransferselectaction"
class="com.h3.common.action.optiontransferselectaction"
method="display">
<result name="none">/pages/optiontransferselect.jsp</result>
</action>
<action name="resultaction"
class="com.h3.common.action.optiontransferselectaction" >
<result name="success">/pages/result.jsp</result>
</action>
</package>
</struts>
http://localhost:8080/struts2optiontransferselect/optiontransferselectaction.action