如何使用 JSP 初始化和迭代变量

How to initialize and interate over a variable with JSP

这对我来说是第一次 JSP 和一般的 Web 应用程序。我正在编写的这段代码有问题:

<%
            List<Location> result = new ArrayList<>();
            if (basicSearchBean.validate()) {
                 result = basicSearchBean.getResult();
            }
            pageContext.setAttribute("result", result);
        %>
    <div style="width: 800px; margin-left: 50px; margin-top: 30px;">
        <%
            if ( result.size() > 0 ) {
        %>
                 //VISUALIZATION PART
        <%
            }
        %>
    </div>

此代码是 jps 页面的一部分,用户在该页面中填写表单,然后按下在页面本身上重定向的类型提交按钮。在validate()(javabean basicSearchBean 的方法)之后设置了basicSearchBean 的私有变量"result"。代码总是在 if ( result.size() > 0 ) 中失败并出现错误 NullPointerException。我是否在 jsp 页面中以错误的方式初始化了变量?

这是bean的代码

public class SearchBean {

    //other attributes...

    private List<Location> result;


    public List<Location> getResult() {
        return result;
    }

    public void setResult(List<Location> result) {
        this.result = result;
    }



    public SearchBean() {
    }

   //Getters and setters.... 

    public boolean validate() {

        if(this.nation.equals("") || this.city.equals("") || this.checkin == null|| this.checkout == null) {
            return false;
        }
        try {
            this.result = FilteredSearch.getListOfStructures(this);
        } catch (Exception e) {
            return false;
        }
        return true;
    }
}

我在 Web 上找到了一个指南,其中像 getListOfStructures() return 这样的方法将变量初始化为 final

非常感谢您的宝贵时间!

我看不出您在此处显示的代码有任何问题。您的变量已正确初始化,空值来自 bean。大概这是因为 FilteredSearch.getListOfStructures() 返回 null,但这是您必须自己调试的事情。

但是...在 JSP 页面中写入 Java 的块是非常糟糕的做法,您应该尽可能避免这种情况。请参阅 this page 了解一些良好做法指南。

我想你会发现使用 JSTL and EL 这个任务会容易得多。它们基本上为常用函数和机制提供标签库,用于从 bean 访问数据、迭代数据等。它可以节省您编写大量样板代码,并且意味着您在大多数情况下可以避免在页面中使用 Java本身。

此外,您还可以创建自己的标签 (tutorial),这样您就可以将 Java 逻辑与页面布局分开。

如果你很好地使用这些技术,你应该最终得到一个只包含 JSP/HTML 标签的 JSP 页面,并且所有逻辑将被分离到你的 bean 和任何标签 类这比在表示层中包含逻辑更容易编写、理解和维护。