有条件的:春天的行动

时间:2017-07-29 18:26:29

标签: java spring forms thymeleaf

我有form来修改对象。此对象可以在两个页面中使用,具有相同的值。

我想有两个按钮,并根据提交的按钮发送到一个页面或另一个页面。

现在我的代码是这样的:

<!-- 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>

th:action应该是动态的。

我已经在我的控制器中创建了方法,所以取决于我可以处理它的操作:

@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 docs中,我看到了类似的东西,但我无法处理它。

更新1

我的对象是一个矩阵,在我的页面中呈现了N列。如果一切正常,我会编辑其值,但我可以使用操作添加新列。

我想要两个按钮,并根据哪些按钮转到新的或进行编辑。 该对象始终存在。

有什么建议吗?

由于

3 个答案:

答案 0 :(得分:1)

我认为使用javascript更容易做到这一点。

&#13;
&#13;
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();
  })
 );
&#13;
  <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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我猜你想在没有现有对象的情况下发布到/new,在你做的时候发布到/edit

你的行动应该是

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

自从你在模板中插入逻辑以来,这不是最干净的代码,你可能会通过将动作值设置为呈现表单的控制器中的ModelView属性来改善,但我认为它可能会有效方式。

此外,您还应该考虑将表单处理程序拆分为两个单独的方法,一个映射到/new,另一个映射到/edit,可能会分解出任何共同的代码,而不是检查action

答案 2 :(得分: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>