提问者:小点点

未选中百里香叶复选框的 Java Spring 为空而不是假


我的表单中有复选框:

  <div class="form-check form-check-inline">
                        <input type="checkbox" th:field="${search.titleIncl}" />
                        <label class="form-check-label" th:for="${#ids.next('covered')}">Title</label>
                    </div>

默认情况下,此复选框应处于启用状态,因为搜索对象将此值指定为true。这很好。我所期望的是,当复选框被选中/未选中时,发送true或false。我现在得到的是正确的,如果它被检查,而没有被检查。这对我来说有点问题:

在控制器中:

@GetMapping(value = Utils.MAPPING_INDEX)
public ModelAndView index(@RequestParam("titleIncl") Optional<Boolean> titleIncl) {
    ...calling fillSearch inside of body....
}


private Search fillSearch(Optional<Boolean> titleIncl..) {

        Search search = new Search();

        //Get seach value if nothing provided give me default.
        search.setTitleIncl(titleIncl.orElse(search.isTitleIncl()));
        ...

        return search;
}

因此,如果他取消选中复选框并且我没有在可选中发送 FALSE,我会遇到问题。

当用户初始进入站点时,他不会发送任何这些参数,所以通过将所有参数设置为true,可以正常工作。巴德一旦开始搜索并取消选择他不想搜索的部分,他仍然会默认并搜索所有内容。

那么,如果复选框值没有被选中,有没有一种简单的方法来发送可选的FALSE呢?

注:

>

  • 简单地说,我的意思是不为这个表单搜索创建额外的endpoint,也不需要Javascript:)

    是的,表单在GET请求下


  • 共1个答案

    匿名用户

    无论您做什么,都只会将选中的复选框发送到服务器,而不是取消选中的复选框。您必须在服务器中对其进行编码才能处理未选中的复选框。

    https://www . w3 . org/TR/html 401/interact/forms . html #表单控件

    复选框(和单选按钮)是用户可以切换的开/关开关。当控制元素的checked属性被设置时,开关是“开”的。提交表单时,只有“on”复选框控件才能成功。

    但是用百里香叶,你可以像下面这样试试,

    <ul>
      <li th:each="feat : ${allFeatures}">
        <input type="checkbox" th:field="*{features}" th:value="${feat}" />
        <label th:for="${#ids.prev('features')}" 
               th:text="#{${'seedstarter.feature.' + feat}}">Heating</label>
      </li>
    </ul>
    

    这将产生下面的html ,

    <ul>
      <li>
        <input id="features1" name="features" type="checkbox" value="SEEDSTARTER_SPECIFIC_SUBSTRATE" />
        <input name="_features" type="hidden" value="on" />
        <label for="features1">Seed starter-specific substrate</label>
      </li>
      <li>
        <input id="features2" name="features" type="checkbox" value="FERTILIZER" />
        <input name="_features" type="hidden" value="on" />
        <label for="features2">Fertilizer used</label>
      </li>
      <li>
        <input id="features3" name="features" type="checkbox" value="PH_CORRECTOR" />
        <input name="_features" type="hidden" value="on" />
        <label for="features3">PH Corrector used</label>
      </li>
    </ul>
    

    不要担心那些带有name="_features"的隐藏输入:它们是自动添加的,以避免浏览器在表单提交时不向服务器发送未经选中的复选框值的问题。

    更多信息,

    https://www . thyme leaf . org/doc/tutorials/3.0/thyme leaf spring . html #复选框-字段