我有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列。如果一切正常,我会编辑其值,但我可以使用新操作添加新列。
我想要两个按钮,并根据哪些按钮转到新的或进行编辑。 该对象始终存在。
有什么建议吗?
由于
答案 0 :(得分: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();
})
);
&#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;
答案 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>