代码之家  ›  专栏  ›  技术社区  ›  hello_earth

禁用输入的spring模型绑定

  •  -1
  • hello_earth  · 技术社区  · 6 年前

    很抱歉问了一个愚蠢的问题,但我不太明白会发生什么,如果这是我所怀疑的…我真的很茫然。 我使用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,但也没用。

    1 回复  |  直到 6 年前
        1
  •  6
  •   ISlimani    6 年前

    这里有个误会我想用 disabled 是的。

    一个 readonly 元素不可编辑,但 当 根据表格提交 是的。一 残疾人 元素不可编辑并且 不是 提交时发送 是的。另一个区别是 只读 元素可以是 集中注意力(在表单中“切换”时集中注意力) 残疾人 元素不能。

    More detailed comparison

    所以回答你的问题:你应该选择 只读 如果要将属性绑定到 pojo 用户仍然不能编辑它们。