2017-07-29 72 views
0

我有一个表单来修改一个对象。该对象可以在两个页面中使用,具有相同的值。条件th:春季行动

我想有两个按钮,并取决于按钮submited发送到一个或另一个页面。

现在我的代码是这样的:

<!-- Make my action dinamically depending on button submitted --> 
    <form action="#" th:action="@{/action}" th:object="${myObject}" 
      method="post"> 
      <input type="submit" name="new" value="new" /> 
      <input type="submit" name="edit" value="edit" /> 
    </form> 

日:动作要动态

我创建方法在我的控制器,以便根据不同的活动,我可以对付它。

@RequestMapping(value = { "/new", "/edit" }, method = RequestMethod.POST) 
     public String handlePost(@RequestParam String action, @ModelAttribute MyObject myObject) { 


      if (action.equals("new")) { 
       //Make some stuff 
       return "new"; 

      } else if (action.equals("edit")) { 
      //Make some stuff 
       return "edit"; 
      } 

      return "index"; 

     } 

在thymeleaf文档中,我看到类似的东西,但我无法处理它。

更新1

我的目标是在我的网页呈现N列的矩阵。如果一切正常,我编辑它的值,但我可以使用新的操作添加新列。

我想要两个按钮,并取决于他们哪些去新的或去编辑。 该对象始终存在。

有什么建议吗?

感谢

回答

0

我猜你想要发布到/new,当你没有一个现有的对象,并/edit当你这样做。

你的行动应该是这样的

th:action="${myObject != null ? '/edit' : '/new'}

这不是最干净的代码,自从你在你的模板中插入逻辑,你可能会是通过设置动作值作为模型视图更好在呈现表单的控制器中的属性,但我认为它可能以这种方式工作。

此外,你也应该考虑在两种不同的方法,一个映射到/new和一个映射到/edit分裂你的表单处理程序,可能分解出任何共同的代码,而不是检查action值。

+0

但将ñ不会导致应该包含上下文路径的URL。 –

+0

如果您需要使用'@ {/ action}'来保留上下文路径,那么您唯一的解决方案就是在呈现窗体的控制器中填充操作变量。 – Raibaz

+0

我认为这应该工作:'th:action =“@ {myObject!= null?'/ edit':'/ new'}' –

1

我认为使用javascript做这件事会容易一些。

let form = document.forms[0]; // or replace with an identifier for the form 
 

 

 
Array.from(form.getElementsByTagName('input')).filter(e => e.type === 'submit').forEach(btn => 
 
    btn.addEventListener('click', e => { 
 
    e.preventDefault(); 
 
    form.setAttribute('action', '/' + e.target.name); 
 
    console.log(form.getAttribute('action')); 
 
    form.submit(); 
 
    }) 
 
);
<form action="#" th:action="@{/action}" th:object="${myObject}" 
 
      method="post"> 
 
      <input type="submit" name="new" value="new" /> 
 
      <input type="submit" name="edit" value="edit" /> 
 
    </form>

0

我这样做的方式如下:

在控制器:

modelAndView.addObject("action", "Save"); 

在模板:

th:action="${action} == 'Save' ? @{/manageCategory/addEditCategory/addCategory} : @{/manageCategory/addEditCategory/editCategory}" th:object="${addCategoryDTO}" method="POST" 

<button th:text="${action == 'Edit'} ? 'Edit' : 'Save'" id="btnsubmit" class="btn blue okMark" type="submit" ></button>