为什么Ajax+Struts2中不能将的参数提交啊

cpych 2008-11-04 08:22:58
只有当<s:select>中的只要添加了size 或 mutiple 等属性,在Action中就接不到这一节点的参数

例如:<s:select theme="simple"
multiple="true"
list="#{'':''}"
headerKey="headerKey"
headerValue="--- 请选择商品类别 ---"
name="left"
size="12"
id="left"></s:select>
在Action中利用ServletActionContext.getRequest().getParameterNames()就不会接到left这一参数

但是当:<s:select theme="simple"
list="#{'':''}"
headerKey="headerKey"
headerValue="--- 请选择商品类别 ---"
name="left"
id="left"></s:select>
在Action中利用ServletActionContext.getRequest().getParameterNames()就可以接到left这一参数
...全文
433 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpych 2008-11-05
  • 打赏
  • 举报
回复
//其中的="/TransManager/ajax_files/ajax_func.js是通用的ajax前面的代码
///TransManager/modifyShipper.jsp_files/pref.js是
function moveSelectedOptions(objSourceElement, objTargetElement, toSort, notMove1, notMove2) {
var test1 = compile(notMove1);
var test2 = compile(notMove2);
moveOptions(objSourceElement, objTargetElement, toSort,
function(opt) {
return (opt.selected && !test1(opt.value) && !test2(opt.value));
}
);
}

function moveAllOptions(objSourceElement, objTargetElement, toSort, notMove1, notMove2) {
var test1 = compile(notMove1);
var test2 = compile(notMove2);
moveOptions(objSourceElement, objTargetElement, toSort,
function(opt) {
return (!test1(opt.value) && !test2(opt.value));
}
)
}

function compile(ptn) {
if (ptn != undefined) {
if (ptn == '' || !window.RegExp) {
return function(val) { return val == ptn; }
} else {
var reg = new RegExp(ptn);
return function (val) {
if (val == '') { // ignore empty option added by template
return true;
}
return reg.test(val); }
}
}
return function(val) { return false; }
}

function moveOptions(objSourceElement, objTargetElement, toSort, chooseFunc) {
var aryTempSourceOptions = new Array();
var aryTempTargetOptions = new Array();
var x = 0;

//looping through source element to find selected options
for (var i = 0; i < objSourceElement.length; i++) {
if (chooseFunc(objSourceElement.options[i])) {
//need to move this option to target element
var intTargetLen = objTargetElement.length++;
objTargetElement.options[intTargetLen].text = objSourceElement.options[i].text;
objTargetElement.options[intTargetLen].value = objSourceElement.options[i].value;
}
else {
//storing options that stay to recreate select element
var objTempValues = new Object();
objTempValues.text = objSourceElement.options[i].text;
objTempValues.value = objSourceElement.options[i].value;
aryTempSourceOptions[x] = objTempValues;
x++;
}
}

//sorting and refilling target list
for (var i = 0; i < objTargetElement.length; i++) {
var objTempValues = new Object();
objTempValues.text = objTargetElement.options[i].text;
objTempValues.value = objTargetElement.options[i].value;
aryTempTargetOptions[i] = objTempValues;
}

if (toSort) {
aryTempTargetOptions.sort(sortByText);
}

for (var i = 0; i < objTargetElement.length; i++) {
objTargetElement.options[i].text = aryTempTargetOptions[i].text;
objTargetElement.options[i].value = aryTempTargetOptions[i].value;
objTargetElement.options[i].selected = false;
}

//resetting length of source
objSourceElement.length = aryTempSourceOptions.length;
//looping through temp array to recreate source select element
for (var i = 0; i < aryTempSourceOptions.length; i++) {
objSourceElement.options[i].text = aryTempSourceOptions[i].text;
objSourceElement.options[i].value = aryTempSourceOptions[i].value;
objSourceElement.options[i].selected = false;
}
}

function sortByText(a, b) {
if (a.text < b.text) {return -1}
if (a.text > b.text) {return 1}
return 0;
}

function selectAllOptionsExceptSome(objTargetElement, type, ptn) {
var test = compile(ptn);
for (var i = 0; i < objTargetElement.length; i++) {
var opt = objTargetElement.options[i];
if ((type == 'key' && !test(opt.value)) ||
(type == 'text' && !test(opt.text))) {
opt.selected = true;
} else {
opt.selected = false;
}
}
return false;
}

function selectAllOptions(objTargetElement) {
for (var i = 0; i < objTargetElement.length; i++) {
if (objTargetElement.options[i].value != '') {
objTargetElement.options[i].selected = true;
}
}
return false;
}

function swapOptions(objTargetElement, first, second) {
var opt = objTargetElement.options;
var temp = new Option(opt[first].text, opt[first].value, opt[first].defaultSelected, opt[first].selected);
var temp2= new Option(opt[second].text, opt[second].value, opt[second].defaultSelected, opt[second].selected);
opt[first] = temp2;
opt[second] = temp;
}
///TransManager/modifyShipper.jsp_files/common.js是
function sendProducts(){

var categoryId=document.getElementById("categoryId").value;
send_request('post','productItems!preModify.action?categoryId='+categoryId,null,"text",getResultProducts);
}

function getResultProducts(){
var loading=document.getElementById('loading');
loading.innerHTML="<div id='loading'><img src='ajax_files/loading_2.gif'/></div>";
if(http_request.readyState==4){
var productSelect1=document.getElementById('productSelect1');
var newItems=eval('('+http_request.responseText+')');
var content = "<div id='productSelect1'><select name='left' size='12' id='left' multiple='multiple'>"+
"<option value='headerKey'>--- 请选择商品类别 ---</option>";
if(newItems.productIdList.length>0){
for(i=0;i<newItems.productNameList.length;i++){
content=content+
"<option value="+newItems.productIdList[i]+">"+newItems.productNameList[i]+"</option>"
}
}
content+="</select></div>";
loading.innerHTML="<div id='loading'></div>";
productSelect1.innerHTML=content;
}
}
/////////////////////这样用struts2+spring+hibenate+ajax时提交到Action中用ServletActionContext.getRequest().getParameterNames()就不会接到那个select的参数
cpych 2008-11-05
  • 打赏
  • 举报
回复
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>index</title>
<script src="/TransManager/ajax_files/ajax_func.js" type="text/javascript"></script>
<script type="text/javascript" src="/TransManager/modifyShipper.jsp_files/pref.js"></script>
<script src="/TransManager/modifyShipper.jsp_files/common.js" type="text/javascript"></script>
</head>
<body onload="sendRightSelect()">
<s:form action="shipperOperate!modifyShipper" theme="simple" method="post" >
<table>
<tr>
<td>修改进货商类别名称</td>
</tr>
</table>
<table border="1">
<s:iterator value="shipperList">
<tr>
<td>进货商名称</td>
<td><s:textfield name="shipperName" value="%{shipperName}"></s:textfield></td>
</tr>
</s:iterator>
<tr>
<td><s:submit value="提交"></s:submit></td>
<td><s:reset value="重置"></s:reset></td>
</tr>
</table>
<table>
<tr>
<td class="tdLabel"><label for="left" class="label">请将进货商对应的商品加入右边的选框中(重复选入的商品不会重复计入):</label></td>
</tr><tr>
<td>
<table border="0">
<tr>
<td align="left">
<label for="leftTitle">商品</label><br />
<div id="productSelect1">
<s:select
theme="simple"
multiple="true"
list="#{'':''}"
headerKey="headerKey"
headerValue="--- 请选择商品类别 ---"
name="left"
size="12"
id="left"></s:select></div>
</td>
<td valign="middle" align="center">
<input type="button"
value=" <-  "
onclick="moveSelectedOptions(document.getElementById('right'), document.getElementById('left'), false, 'doubleHeaderKey', '');" /><br />
<input type="button"
value="  -> "
onclick="moveSelectedOptions(document.getElementById('left'), document.getElementById('right'), false, 'headerKey', '');" /><br /><br />
<input type="button"
value="<<--"
onclick="moveAllOptions(document.getElementById('right'), document.getElementById('left'), false, 'doubleHeaderKey', '');" /><br />
<input type="button"
value="-->>"
onclick="moveAllOptions(document.getElementById('left'), document.getElementById('right'), false, 'headerKey', '');" /><br /><br />
<input type="button"
value=" <*>"
onclick="selectAllOptionsExceptSome(document.getElementById('left'), 'key', 'headerKey');selectAllOptionsExceptSome(document.getElementById('right'), 'key', 'doubleHeaderKey');" />
</td>
<td>
<label for="rightTitle">要提交的商品</label><br />
<s:select
theme="simple"
multiple="true"
list="productSet"
listKey="productId"
listValue="productName"
headerKey="doubleHeaderKey"
headerValue="--- 请选择所需商品 ---"
name="right"
size="12"
id="right">
</s:select>
</td>
</tr>
<tr>
<td><label for="categories">商品类别:</label><br />
<s:select
id="categoryId"
name="categoryId"
list="categoryList"
listKey="categoryId"
listValue="categoryName"
onchange="sendProducts()">
</s:select></td>
<td align="left"><br><div id="loading"></div></td>
<td> </td>
</tr>
</table>
</td>
</tr>
</table>
<s:hidden id="from" name="from" value="notfromadd"/>
</s:form>
</body>
</html>
cpych 2008-11-05
  • 打赏
  • 举报
回复
对啊,就多了multiple就不可以了
phoenixLotus 2008-11-04
  • 打赏
  • 举报
回复
多了 这个属性multiple="true"就不可以?
耶律火柴 2008-11-04
  • 打赏
  • 举报
回复
你ajax的请求的怎么发送的

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧