【问题标题】:Play Framework IF statement and FOR loopPlay Framework IF 语句和 FOR 循环
【发布时间】:2016-03-25 15:25:12
【问题描述】:

我是 MVC 新手,关注 this link 我有一个使用 Solr 生成的 pdf 元数据的搜索页面。我的 if 语句和 html 端的 for 循环不起作用

模型文件夹中的 Searching.java:

public class Searching {

    public String q;

    public String outputTitle;
    public String outputAuthor;
    public String outputContent;
    public String outputPage;
    public String outputPath;

}

Application.java 中的搜索功能:

    final static Form<Searching> searchForm = form(Searching.class);
    final static List<Searching> searchList = new ArrayList<Searching>(); 

public static Result search() {
Form<Searching> filledForm = searchForm.bindFromRequest();
        Searching searched = filledForm.get();

....(database connection lines)

QueryResponse response = solr.query(query);
SolrDocumentList results = response.getResults();
    if(results.isEmpty())
                System.out.println("SEARCH NOT FOUND");
    else {
        for (int i = 0; i < results.size(); ++i) {

            searched.outputTitle = (String)results.get(i).getFirstValue("title");
            searched.outputAuthor = (String)results.get(i).getFirstValue("author");
            searched.outputPage =results.get(i).getFirstValue("pageNumber").toString();
            searched.outputContent = (String)results.get(i).getFirstValue("content");
            searched.outputPath =  (String)results.get(i).getFirstValue("path");    
            searchList.add(searched);   
        }
        System.out.println("\nresults.getNumFound(): "+ searched.outputFound);
        System.out.println("results.size(): "+results.size());
        }
    return play.mvc.Results.ok(search.render(searched, searchForm, searchList)); 
    }

search.scala.html

@(searched: Searching, searchForm: Form[Searching], searchList: List[Searching])
.. some buttons,a search bar...
@if(searchList.isEmpty()) {
                <h1>Error</h1>
            } else {
                @for(search <- searchList) {
                <ul>Title: @search.outputTitle</ul> 
                <ul>Author: @search.outputAuthor <a href="@search.outputPath" download>Download PDF</a></ul>
                <ul>Number of Page(s): @search.outputPage</ul>
                }   
            }

Java 代码运行良好。我可以在终端上看到输出,但我的 html 端有问题,它根据 searchList 的大小多次显示一本书

【问题讨论】:

  • 你真的应该给你的变量和参数起正确的名字。无论如何,您在模板中用于迭代的listForm: List[Searching] 参数是空的。用数据填充列表或迭代其他内容
  • 专有名称是什么意思?然后我想我需要在 Application.java 中更改 for 循环
  • 将您的参数命名为listForm,然后说它是List[Searching] 类型并不是很直观。关键是,您只是在创建一些静态字段并将其传递给模板 - 当然它不会包含任何数据。 Java 代码中还有另一个问题 - 您迭代 results 但只使用一个变量 (searched) - 这样您总是会覆盖数据。
  • searchList.add(searched); 行必须在 for 循环内。现在你有一个列表,但只有一个元素。您认为您有两个元素,因为您打印 results.getNumFound() 但实际上您应该比较 results.getNumFound()searchList.size() 并看到它们不同。所以,把上面提到的那行放在for循环中

标签: java playframework playframework-2.4


【解决方案1】:

即使我能够在聊天中帮助 OP,我也会明确发布答案 - 也许其他人遇到了此类问题但没有检查聊天:

问题是即使您在 for 循环中有该行,您仍然使用相同的 searched 变量。您要做的是在进入循环时重新初始化变量。比如:

for (...) {
    searched = new Searching();
    searched.outputTitle = (String)results.get(i).getFirstValue("title");
    ....
    searchList.add(searched);
}

这解决了重复的问题,现在一切都很好。

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多