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