Struts2 OptionTransferSelect标签使用
转自 出家如初,成佛有余
有时候需要在两个Select框中双向挪动数据,此种在Struts2叫OptionTransferSelect,效果如下:
1. Action层
TransferSelect.java
package com.mobilesoft.esales.webapp.action;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
public class TransferSelect extends BaseAction {
private static final Logger logger = Logger.getLogger(DoubleListAction.class);
String[] leftRoles;
String[] rightRoles;
public String execute(){
return SUCCESS;
}
public String transferSelect(){
ArrayList<Roles> leftList=new ArrayList<Roles> ();
Roles leftRoles1=new Roles();
leftRoles1.setRoleId(1);
leftRoles1.setRoleName("角色1");
Roles leftRoles2=new Roles();
leftRoles2.setRoleId(2);
leftRoles2.setRoleName("角色2");
Roles leftRoles3=new Roles();
leftRoles3.setRoleId(3);
leftRoles3.setRoleName("角色3");
Roles leftRoles4=new Roles();
leftRoles4.setRoleId(4);
leftRoles4.setRoleName("角色4");
leftList.add(leftRoles1);
leftList.add(leftRoles2);
leftList.add(leftRoles3);
leftList.add(leftRoles4);
ArrayList<Roles> rightList=new ArrayList();
Roles rightRoles1=new Roles();
rightRoles1.setRoleId(1);
rightRoles1.setRoleName("角色5");
Roles rightRoles2=new Roles();
rightRoles2.setRoleId(2);
rightRoles2.setRoleName("角色6");
Roles rightRoles3=new Roles();
rightRoles3.setRoleId(3);
rightRoles3.setRoleName("角色7");
Roles rightRoles4=new Roles();
rightRoles4.setRoleId(4);
rightRoles4.setRoleName("角色8");
rightList.add(rightRoles1);
rightList.add(rightRoles2);
rightList.add(rightRoles3);
rightList.add(rightRoles4);
getRequest().setAttribute("rightList", rightList);
getRequest().setAttribute("leftList", leftList);
return SUCCESS;
}
public String transferSelectPost(){
Map map=getRequest().getParameterMap();
Set set=map.entrySet();
Iterator iterator=set.iterator();
while(iterator.hasNext()){
Map.Entry mapEntry=(Map.Entry)iterator.next();
if(mapEntry.getValue() instanceof String[]){
String[] selectValues=(String[])mapEntry.getValue();
for(int i=0;i<selectValues.length;i++){
logger.fatal("For map test,The key is: "+mapEntry.getKey()+",value is :"+selectValues[i]);
}
}
}
for(int i=0;i<leftRoles.length;i++){
logger.fatal("For Array test,The leftRoles roleName is: "+leftRoles[i]);
}
for(int i=0;i<rightRoles.length;i++){
logger.fatal("For Array test,The rightRoles roleName is: "+rightRoles[i]);
}
getRequest().setAttribute("map", map);
return SUCCESS;
}
public void setLeftRoles(String[] leftRoles) {
this.leftRoles = leftRoles;
}
public void setRightRoles(String[] rightRoles) {
this.rightRoles = rightRoles;
}
}
Roles.java
package com.mobilesoft.esales.webapp.action;
public class Roles {
private Integer roleId;
private String roleName;
public Roles(){
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
2. Web层
transferselect.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" errorPage="/error.jsp" pageEncoding="GBK" contentType="text/html;charset=GBK" %>
<html>
<head>
<title>Struts 2 Cool Tags - OptionTransferSelect</title>
<s:head theme="ajax"/>
</head>
<body>
<h2>用户角色授权</h2>
<s:form action="transferSelectPost" name="form1" >
<s:optiontransferselect
label="测试-Action数据"
name="leftRoles"
leftTitle="用户已授权角色"
list="#request.leftList"
listKey="roleId"
listValue="roleName"
multiple="true"
headerKey="headerKey"
headerValue="--- 请选择用户角色 ---"
emptyOption="false"
allowUpDownOnLeft="false"
cssStyle="width:200px;height:300px;"
rightTitle="用户未授权的角色"
doubleList="#request.rightList"
doubleListKey="roleId"
doubleListValue="roleName"
doubleName="rightRoles"
doubleHeaderKey="doubleHeaderKey"
doubleHeaderValue="--- 请选择用户角色 ---"
doubleEmptyOption="false"
doubleMultiple="true"
allowUpDownOnRight="false"
doubleCssStyle="width:200px;height:300px;"
/>
<s:submit align="left"/>
</s:form>
</body>
</html>
transferselectpost.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" errorPage="/error.jsp" pageEncoding="GBK" contentType="text/html;charset=GBK" %>
<html>
<head>
<title>Struts 2 Cool Tags - OptionTransferSelect</title>
<s:head />
</head>
<body>
<h2>选择结果</h2>
<s:form action="transferSelect" name="form1" >
<s:iterator value="#request.map" status="mystatus">
<tr>
<td>
<s:property value="key" />:<s:property value="value" />,
</td>
</tr>
</s:iterator>
<s:submit align="left"/>
</s:form>
</body>
</html>
3. struts.xml
<action name="transferSelect" method="transferSelect"
<result name="success">test/transferselect.jsp</result>
</action>
<action name="transferSelectPost" method="transferSelectPost"
<result name="success">test/transferselectpost.jsp</result>
</action>
jsp中的<s:optiontransferselect />标签已正常显示使用
<s:optiontransferselect tooltip="用户权限" label="设置权限" name="mhPopedom.leftList_1" leftTitle="用户未授权限" list="leftList_1" listKey="popeId" listValue="popeName" headerKey="headerKey" multiple="true" emptyOption="false" allowUpDownOnLeft="false" cssStyle="width:200px;height:300px;" cssClass="input2" addToLeftLabel="向左移动" addToRightLabel="向右移动" addAllToLeftLabel="全部左移" selectAllLabel="全部选择" addAllToRightLabel="全部右移" doubleName="rightPopedom" rightTitle="用户已授权限" doubleList="rightList_1" doubleListKey="popeId" doubleListValue="popeName" doubleHeaderKey="doubleHeaderKey" doubleMultiple="true" doubleEmptyOption="false" allowUpDownOnRight="false" doubleCssClass="input2" doubleCssStyle="width:200px;height:300px;"> </s:optiontransferselect> 但不论怎样在action中都不能获得rightPopedom的值,报空指针异常。 请各位帮忙,在线急等!!!! |
|
flybida 2009-07-28
后台action里面添加属性(setXXX和getXXX方法):
private String[] leftList; private String[] rightList; 在前台页面上,当提交表单时,onclick事件调用下面的js: <script type="text/javascript"> function myself(){ var right=document.forms[0].rightList; for(i=1; i <right.length; i++) right[i].selected = true; } </script> 提交后,就能在后台得到rightList里面的值了。 如果没有这段Js代码,后台是得不到值的,这是Struts2 <s:optiontransferselect/>本身的bug. |