【问题标题】:how to pass a value from jsp to controller如何将值从jsp传递给控制器
【发布时间】:2012-08-13 01:52:00
【问题描述】:

我在 JSP 中有一些代码如下:

<c:iterate name="list" id="payment" index="idx">
<tr class="gRowEven"
  _paid="<c:write name="payment" property="paid"/>">

现在我的问题是我想根据变量_paid 在控制器中调用一个方法。我可以做一个request.setAttribute("_paid", _paid)

我假设它会起作用。但我不应该那样做。所以我想知道是否有其他方法可以做到这一点?

【问题讨论】:

  • 为什么不使用AJAX通知控制器?

标签: spring-mvc controller jsp-tags taglib


【解决方案1】:

您可以将该值传递给隐藏的输入字段(在表单提交时)

<form action='your controller' method='POST'>
    ...
    <input type='hidden' id='newfield' name='newfield' value=''/>
</form>

然后您的控制器可以检索其值(使用 request.getParameter('newfield') 或 MVC 框架提供的方法)


或者,如果您的控制器接受 GET 请求,则只需附加到 URL


顺便说一句,

request.setAttribute("_paid",_paid);

可能不适合你。因为此调用仅在页面加载时执行,而不是在您提交页面时执行。另外,当你提交一个页面时,它会有一个新的请求


编辑:(这就是我所说的“将该值传递给隐藏的输入字段(在表单提交时)”)

<script type='text/javascript'>
    function updateHiddenField() {
        var trPaid = document.getElementById('trPaid'); //assume tr field's id is trPaid
        //if tr doesn't have an id, you can use other dom selector function to get tr 
        //element, but adding an id make things easier
        var value = trPaid.getAttribute('_paid');
        document.getElementById('newfield').value = value;
        document.getElementById('form1').submit();
        return false;
    }
</script>

<form action='your controller' id='form1' method='POST'  
        onsubmit='javascript:updateHiddenField();'>
    ...
</form>

然后_paid的值会在newfield参数中通过request传递


下面是使用 Spring MVC 时获取参数的方式

@Controller
@RequestMapping("/blah")
public class MyController {

    @RequestMapping(value="/morepath" method = RequestMethod.POST)
    public ModelAndView test(@RequestParam("newfield") int paid) {
        logger.debug("here's the value of paid: " + paid);
    }
 ...

【讨论】:

  • 那么使用该代码 中的每个变量都会传递给请求?
  • 不是自动的。您需要实现一个 javascript 函数,例如
    请看我更新的答案
猜你喜欢
相关资源
最近更新 更多
热门标签