【问题标题】:OnClick Event Not Firing Before Spring MVC Controller在 Spring MVC 控制器之前未触发 OnClick 事件
【发布时间】:2015-10-31 10:21:24
【问题描述】:

我正在尝试一一触发 onClick 事件和 Spring 控制器。 在按钮的单击事件中,我设置了一个隐藏字段,然后我希望执行控制器并且隐藏字段在其中可用。这是我的 JSP 和 Spring 控制器代码

JSP

<html:hidden property="MenuID" name="MenuID" id="hidMenuID" />
<c:forEach items="${menus}" var="menu" > 
<tr class="cartItem">
   <td align="left" >${MenuId}</td>
   td align="right"><input type="text" name="menu_name" value="${Name}"/></td>
   <td align="right"><input type="text" name="menu_price" value="${MenuPrice}"/></td>
   <td align="right"><input type="submit" class="button" name="add_menu" value="Add" onclick="return SetMenuID();"></td>
   <td align="right"><input type="submit" class="button" name="remove_menu" value="Remove" onclick="return SetMenuID();"></td>
</tr>
</c:forEach>  

JavaScript

<script type="text/javascript">
    function SetMenuID()
    {  
        var MenuID = document.getElementById('hidMenuID');    
        MenuID.value = 'The new value';                
        return true;
    }
</script>

Spring MVC

@RequestMapping(params = "add_menu", method = RequestMethod.POST)
public ModelAndView AddMyMenu(@RequestParam("MenuID") String menu_id, Model model, @ModelAttribute("cart") ArrayList<Menu> mycart)
{
    int nMenuId = Integer.parseInt(menu_id);
    Menu menu = m_arrMenus.get(nMenuId);

    model.addAttribute("menus", GetMenus());
    mycart.add(menu);

    return new ModelAndView("edit_menu");     
}

正如您可能猜到的那样,我正在从数据库中填充数据。我有一个与每个 ADD 按钮关联的 onClick 函数。我在这个函数中设置了隐藏字段,并希望它在我的控制器中可用。但是运行时异常来了

错误状态 400 - 所需的字符串 MenuID 不存在

我应该怎么做才能达到类似的结果?感谢您的任何意见。

【问题讨论】:

    标签: java spring events controller


    【解决方案1】:

    @RequestParam 在请求 url 中需要一个参数 my name。 由于您的表单已提交并且该操作没有收到请求参数。这是您从服务器收到 400 http 错误的原因。

    查看@RequestParam vs @PathVariable的区别

    所以要么更改@RequestParam 注释,要么将(required = false) 添加到它。

    【讨论】:

    • 是的。添加(required = false) 后,我不再收到 HTTP 400 错误。但该值为 NULL,我想在表单提交之前将其设置为 BEFORE,在 onclick() 事件中并在控制器方法中可用。我怎么能这样做??
    • 只需将@RequestParam("MenuID") String menu_id 更改为字符串menu_id。它应该工作
    • 我将其更改为public ModelAndView AddMyMenu(String menu_id, Model model....) { some code},但仍显示空值。我是错过了什么,还是只是愚蠢地没有得到你??
    • 在您的表单中,您的文本字段名称为MenuID,您无法将其绑定到menu_id,请在控制器中将其更改为MenuID,反之亦然
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多