【问题标题】:How to pass variable number of parameters from jsp page to the java controller如何将可变数量的参数从jsp页面传递到java控制器
【发布时间】:2014-12-29 22:13:45
【问题描述】:

我有一个 jsp 页面和一个具有填充功能的控制器:

 java controller code:

@Controller
public class AddNewItemController {

@RequestMapping(value = "/newItem/submit", method = RequestMethod.POST)
public String getDataForInterval4(@RequestParam("itemId") String itemId, @RequestParam("product1SkusCnt") String product1SkusCnt, @RequestParam("itemName") String itemName, HttpServletRequest request) {

	return "ItemSubmitted";
}
}
my main jsp file that submits to controller:

<center>
	<table>
		<tr>
			<td>How many items do you have?</td>
			<td> <input type="number" name="productsCnt" id="productsCnt" size="2" min="1" value="1" onchange="productCount()"/> </td> 
		</tr>
	</table>
</center>

<form action="/newItem/submit" method="post">
<br /><br />
<div id="outerDivContainer">
	<div id="product1Div" name="product1Div" >
		<hr /> Product 1 Name: <input id="product1Name" /> Product 1 ID: <input id="product1ID" /> How many SKUs of Product 1? <input id="product1SkusCnt" type="number" size="2" min="1" value="1" onchange="skusCount(1)"/> <br /><br />
		<div id="skusContainer1">
			<div id="sku1Div">
				SKU 1 Name: <input id="sku1"/>
			</div>	<br />
		</div>
	</div>

</div>
<hr />
<input type="submit" value="Submit" /> 
</form>

<script>
function productCount() {
	console.log("onchange product");
	document.getElementById('outerDivContainer').innerHTML = "";
	var cnt = document.getElementById('productsCnt').value;
    console.log("cnt="+cnt);
	for (i=0;i<cnt;i++){
		var newEl = document.createElement('div');
		newEl.class='prodRow';
		j=i+1;
    	newEl.innerHTML = '<div id="product'+j+'Div"><hr /> Product '+j+' Name: <input id="product'+j+'Name" /> Product '+j+' ID: <input id="product'+j+'ID" /> How many SKUs of Product '+j+'? <input id="product'
    			+j+'SkusCnt" type="number" size="2" min="1" value="1" onchange="skusCount('+
    					j+')" /> <br /><br /> <div id="skusContainer'+j+'"><div id="sku1Div"> SKU 1 Name: <input id="sku1"/></div> <br /> </div></div>';
    	document.getElementById('outerDivContainer').appendChild(newEl);
	}	

}

function skusCount(productId){
	console.log("onchange skus, product id= "+productId+";");
	var skusCnt = document.getElementById('product'+productId+'SkusCnt').value;
	console.log("skusCnt="+skusCnt);
	document.getElementById('skusContainer'+productId).innerHTML = "";
	for (i=0;i<skusCnt;i++){
		var newEl = document.createElement('div');
		newEl.class='skuRow';
		j=i+1;
    	newEl.innerHTML = '<div id="sku'+j+'Div">SKU '+j+' Name: <input id="sku'+j+'" /> </div> <br />';
    	document.getElementById('skusContainer'+productId).appendChild(newEl);
	}	
}

</script>

ItemSubmitted.jsp 只是一个确认项目提交成功的 jsp 文件。 问题是我不知道有多少项目将传递给控制器​​,或者每个项目可能有多少 skus。 解决这个问题的建议方法是什么?提前致谢!

【问题讨论】:

  • 您正在提交参数名称product1Name 并且您正在尝试读取其他一些参数
  • 你是对的,但这不是我在我的问题中要问的。我没有尝试运行该代码。我知道这还不是最终的。我需要知道如何解决该问题的人的提示。
  • 是的,您可以将对象列表发布到 mvc 操作。看看这个[post][1][1]:stackoverflow.com/a/10518009/885152

标签: java jsp spring-mvc model-view-controller


【解决方案1】:

我的问题的答案比我预期的要简单得多。我所要做的就是知道我将传递多少个参数及其名称。我不必在控制器中将其指定为@RequestParam("itemId") String itemId, @RequestParam("product1SkusCnt") 等。

相反,我应该只将请求作为参数传递:

@RequestMapping(value = "/newItem/submit", method = RequestMethod.POST) public String getDataForInterval4(HttpServletRequest request) { return "ItemSubmitted"}

我可以通过执行以下操作在控制器中调用每个传递的参数:

request.getParameter("product"+i+"SkusCnt"))

只需要确保我也通过了产品总数。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多