很抱歉,您的问题很愚蠢,但我不知道会发生什么,如果我怀疑这是什么,那么我真的很茫然。 我正在使用弹簧靴+百里香叶+物化CSS来显示和验证表单。 现在,在许多示例中,我所遇到的就是这种情况:
一些表单字段是预先填写的,对于客户端来说应该被禁用,显示其预先填写的值。这种预填充发生在控制器中,而我处理其他一些请求,并重定向到该视图
我正在使用th:object这样将pojo绑定到表单上
<form id="register_form" action="#" th:action="@{/showform}" th:object="${userInfo}" method="post">
<div class="input-field">
<label th:text="#{label.surname}" for="surname"></label>
<input type="text" th:field="*{surname}" id="surname" th:attr="value=${userInfo.surname}" />
</div>
<div class="input-field">
<label th:text="#{label.name}" for="givenname"></label>
<input type="text" th:field="*{givenname}" id="givenname" th:attr="value=${userInfo.givenname}" disabled="disabled" />
</div></form>
并将其放入控制器的POST处理程序中,如下所示:
@RequestMapping(value = {"/showform"}, method = RequestMethod.POST)
public ModelAndView submitFormPage(@ModelAttribute("userInfo") @Valid UserInfo userInfo,
BindingResult bindingResult, RedirectAttributes redir)
{
ModelAndView mview = new ModelAndView();
if (bindingResult.hasErrors())
{
// show form again with error messages
mview.addObject("userInfo", userInfo);
mview.setViewName("/showform");
}
else
{
// ...
}
return mview;
}
RedirectAttributes存在于其他原因。如您所见,表单上有两个元素,第一个被启用,第二个被禁用。 它们的值已正确填入POJO中的预填充值,然后通过ModelMap传递到视图。我也可以在GET处理程序中对其进行跟踪。
但是我从视图中返回的ModelMap包含上述POJO,它具有NULL值来代替绑定到禁用控件的元素。我希望它们将由value属性的内容填充,即使这些控件已禁用。启用的控件保留其值。
还是仅禁用的控件不包含在回发中?如果是这样,您将如何建议我这样做?一些建议增加一个模糊的CSS,以“伪造”禁用控件的行为。还是我错过了常规接线中的某些东西?
我对可能的解决方法感到恐惧-但是我必须做错了什么。th:attr是我尝试过的解决方法之一,但似乎并没有解决问题。我也尝试使用th:id和th:disabled,但这也没有帮助。
答案 0 :(得分:4)
我认为在使用disabled
时会有误解。
readonly
元素不可编辑,但是会在 根据表单提交。disabled
元素不可编辑,不可 发送时提交。另一个区别是readonly
元素可以是 集中注意力(并且在通过表格“制表”时变得集中注意力)disabled
元素不能。
因此回答您的问题:如果要将属性绑定到readonly
,而用户仍然无法编辑它们,则应该选择pojo
。