当前位置: 首页 > 知识库问答 >
问题:

在带有请求参数的thymeleaf中使用搜索功能

百里成仁
2023-03-14

我有一个页面,在那里我可以得到一个条目列表。现在,我希望能够从这些列表中进行搜索。

我当前检索列表的url是/show/products。我想在此页面中添加一个搜索表单,以便可以使用请求参数进行搜索。是的,我可以使用ajax,但我必须使用请求参数

所以如果我搜索一个产品名称,那么- /show/products?############################################################################################

<form ui-jp="parsley" th:action="@{/show/products(name=${pName})}" th:object="${pName}" method="get">
    <div class="row m-b">
        <div class="col-sm-6">
            Search by Name:
            <input id="filter" type="text" th:field="*{pName}" class="form-control input-sm w-auto inline m-r"/>
            <button class="md-btn md-fab m-b-sm indigo">
                <i class="material-icons md-24">&#xe8b6;</i>
            </button>
        </div>
    </div>
</form>

这就是我在控制器中尝试的:

@GetMapping("/show/products")
public String getProduct(Model model,
                         @RequestParam(required = false) String name,
                         @ModelAttribute String pName) {

    List<Product> products = this.productService.getAllProducts(name)
    model.addAttribute("products", products);
    return "show_product";
}

我得到这个错误:

Neither BindingResult nor plain target object for bean name 'pName' available as request attribute
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153)
    at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:897)

共有1个答案

周鸿云
2023-03-14

您正试图使用变量pName(Model属性)作为表单对象。

在您的视图中,您正在向表单传递一个模型属性,如下所示th:object=“${pName}”,但是您需要传递一个表单对象。

表单对象不是一个类,而是一个简单的java对象(POJO)。您可以将表单对象视为您的表单,但在服务器端。

在视图中使用表单对象之前,需要先创建它并将其添加到模型中。

你会这样定义它

public class MyFormObject{
    private String pName;
    public String getPName(){
        return pName;
    }
    public void setPName(String pName){
        this.pName = pName;
    }
}

现在你的控制器方法会变成

@GetMapping("/show/products")
public String getProduct(Model model,
    @ModelAttribute("myFormObject") MyFormObject myFormObject,
    BindingResult result) {
    List<Product> products = this.productService.getAllProducts(myFormObject.getPName());
    model.addAttribute("products", products);
    return "show_product";
}

然后可以像这样将表单对象传递给表单

                       <form ui-jp="parsley" th:action="@{/show/products}" th:object="${myFormObject}" method="get">
                            <div class="row m-b">
                                <div class="col-sm-6">
                                    Search by Name: <input id="filter" type="text" th:field="*{pName}" class="form-control input-sm w-auto inline m-r"/>
                                    <button class="md-btn md-fab m-b-sm indigo"><i class="material-icons md-24">&#xe8b6;</i></button>
                                </div>
                            </div>
                        </form>

您需要阅读文档,所有这些都在那里详细解释。

 类似资料:
  • 问题内容: 在swift 3中建议使用带参数的GET的哪种方法? 范例: 提前致谢 ! 问题答案: 示例如何使用请求。

  • http请求:http://ipaddress:port/someresource?param1=value1&param2=value2&...... 诸如此类。这是jmeter中的http请求示例,它命中rest api并以JSON格式获得响应。 这里的挑战是Param1,param2,param3....这些搜索参数数不是恒定的,它可能会根据调用而改变,所以我制作了一个csv文件,其中包含以

  • 单击from-data或x-www-form-urlencoded 然后在键/值字段上传递两个参数。 ANDROID改装设置 原因是我使用了2个API(webapi和wcf)。我的所有其他响应都是对象数组。[{},{}]但在此呼叫中,我收到了以下信息 但我还是无法解析响应。

  • 我们公司有一个基于.NET的网站 几天前,我们向网站程序员请求一个webservice。昨天他给了我一个URL 当我从localhost打开URL时,它显示了一个页面,我可以从我们请求编程的四个方法(函数)中选择一个。 通过选择其中一个,一个新的页面显示如下: SOAP 1.1 以下是SOAP 1.1请求和响应示例。显示的占位符需要用实际值替换。 POST/webservices/findstat

  • 我是REST API和JSON的新手,我有一个初学者的问题。我试图使用的API根据以下模式请求参数: 请求参数示例如下: 但是,当我试图使用SoapUI和Postman测试这个API时,我只看到参数的键值对,我不知道如何在病人对象中嵌套ID和类型: SoapUI参数 邮递员参数

  • 问题内容: 我正在开发一个需要搜索功能的应用程序,我想编写根据参数动态创建的HQL查询。目前我有4个参数,而根据用户想要的搜索方式,所有参数都是必需的,或者1或2或3个参数是必需的。 这是我对所有4个参数的常规查询,现在我必须编写一个搜索查询,在其中使用多个可选参数,如何使用可选参数进行此查询?请将我的查询转换为动态可选参数查询?谢谢 问题答案: 我这样自己转换查询