Java 条件th:春季行动

Java 条件th:春季行动,java,spring,forms,thymeleaf,Java,Spring,Forms,Thymeleaf,我有一个表单来修改对象。此对象可以在两个具有相同值的页面中使用 我想有两个按钮,并根据按钮提交发送到一个或另一个页面 现在我的代码是这样的: <!-- Make my action dinamically depending on button submitted --> <form action="#" th:action="@{/action}" th:object="${myObject}" method="post"> <input type

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

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

现在我的代码是这样的:

<!-- 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>
在Thymeleaf文档中,我看到了类似的东西,但我无法处理它

更新1

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

我想要两个按钮,取决于它们中的哪一个是“新建”还是“编辑”。 对象总是存在的

有什么建议吗


谢谢

我猜当您没有现有对象时,您想发布到
/new
,当您有对象时,您想发布到
/edit

你的行为应该是

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

自从在模板中插入逻辑以来,它并不是最干净的代码,最好在呈现表单的控制器中将动作值设置为ModelView属性,但我认为它可能是这样工作的


此外,您还应该考虑将您的窗体处理程序拆分为两个单独的方法,一个映射到<代码> /NeX/CODE >,一个映射到<代码> /Edg/<代码>,可能分解出任何共同的代码,而不是检查<代码>操作< /代码>的值。

< P>我猜您想在不存在现有Objo时张贴到<代码> /新< /代码>。执行此操作时,ect和to
/edit

你的行为应该是

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

自从在模板中插入逻辑以来,它并不是最干净的代码,最好在呈现表单的控制器中将动作值设置为ModelView属性,但我认为它可能是这样工作的


此外,您还应该考虑将您的窗体处理程序拆分为两个单独的方法,一个映射到<代码> /NeX/CODE >,另一个映射到<代码> /Edg/<代码>,可能分解出任何共同的代码,而不是检查<代码>操作< /代码>的值。

< P>我认为使用JavaScript更容易做到这一点。p>
let form=document.forms[0];//或替换为表单的标识符
Array.from(form.getElementsByTagName('input')).filter(e=>e.type==='submit').forEach(btn=>
btn.addEventListener('click',e=>{
e、 预防默认值();
form.setAttribute('action','/'+e.target.name);
log(form.getAttribute('action');
表单提交();
})
);

我认为使用javascript做这件事会更容易

let form=document.forms[0];//或替换为表单的标识符
Array.from(form.getElementsByTagName('input')).filter(e=>e.type==='submit').forEach(btn=>
btn.addEventListener('click',e=>{
e、 预防默认值();
form.setAttribute('action','/'+e.target.name);
log(form.getAttribute('action');
表单提交();
})
);

我是这样做的:

在控制器中:

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>
th:action=“${action}=='Save'?@{/manageCategory/addeditcontegory/addCategory}:@{/manageCategory/addeditcegory/editcegory}”th:object=“${addcategorydo}”method=“POST”

我是这样做的:

在控制器中:

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>
th:action=“${action}=='Save'?@{/manageCategory/addeditcontegory/addCategory}:@{/manageCategory/addeditcegory/editcegory}”th:object=“${addcategorydo}”method=“POST”

但这不会产生包含上下文路径的URL。如果您需要使用
@{/action}
来保留上下文路径,那么您唯一的解决方案就是在呈现表单的控制器中填充action变量。我认为这应该可以做到:
th:action=“@{myObject!=null?”/edit':“/new'}
不确定语法是否正确,它可能是
@{${myObject!=null?'/edit':'/new'}}
不,myObject始终存在,它表示一个矩阵,new用于添加新列(我没有正确解释)。因此,根据提交的按钮,我可以添加一个新列或编辑现有列。这是一个想法,也许有另一种方法可以做到。Thxs但这不会生成包含上下文路径的URL。如果需要使用
@{/action}
要保留上下文路径,那么您唯一的解决方案就是在呈现表单的控制器中填充action变量。我认为这应该是可行的:
th:action=“@{myObject!=null?”/edit':'/new'}
不确定语法是否正确,它可能是
@{${myObject!=null?/edit':'/new'}
否,myObject始终存在,它代表一个矩阵,new用于添加一个新列(我没有正确解释)。因此,根据提交的按钮,我添加一个新列或编辑现有列。这就是我的想法,也许还有别的办法。thxs