很抱歉问了一个愚蠢的问题,但我不太明白会发生什么,如果这是我所怀疑的…我真的很茫然。
我使用spring boot+thymeleaf+materialize css来显示和验证表单。
在我看到的许多例子中,我没有遇到过这样的情况:
有些表单字段是预填充的,在客户端看来应该是禁用的,显示它们的预填充值。此预填充在控制器中进行,而我处理其他一些请求,并重定向到此视图
我正在使用如下的th:对象将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的存在还有其他原因。如您所见,表单上有两个元素,第一个是启用的,第二个是禁用的。
它们的值由通过modelmap传递到视图的pojo中的预填充值正确填充。我也可以在get处理程序中跟踪它。
但是我从视图中得到的modelmap包含前面提到的pojo,其中包含空值,而不是绑定到禁用控件的元素。我希望它们由value属性的内容填充,即使这些控件被禁用。启用的控件可以正确地携带其值。
或者仅仅是禁用的控件不包括在回发中?如果是这样,你会建议我怎么做?一些人建议添加一个模糊的css来“伪造”禁用控件的行为。或者我在总接线上漏掉了什么?
我害怕可能的解决办法,但我肯定做错了。泰特:阿特尔是我尝试过的解决办法之一,但似乎没有起到作用。我也试过使用th:id和th:disabled,但也没用。