Java 如何使用JSP初始化和交互变量

Java 如何使用JSP初始化和交互变量,java,jsp,jstl,javabeans,Java,Jsp,Jstl,Javabeans,这是我第一次使用JSP和Web应用程序。我写的代码有问题: <% List<Location> result = new ArrayList<>(); if (basicSearchBean.validate()) { result = basicSearchBean.getResult(); } pageContext.setAttri

这是我第一次使用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>
我在网上找到了一个指南,其中类似
getListOfStructures()
的方法返回一个初始化为
final
的变量


非常感谢您抽出时间

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

然而。。。在JSP页面中编写Java块是非常糟糕的做法,您应该尽可能避免这种情况。有关一些良好实践指南,请参见

我想你会发现这项任务更容易使用和完成。它们基本上为常用函数和机制提供标记库,用于访问bean中的数据、对数据进行迭代等。这样可以节省编写大量样板代码的时间,并且在大多数情况下可以避免在页面本身中使用Java

此外,您还可以创建自己的标记(),它允许您将Java逻辑与页面布局分开

如果您很好地使用了这些技术,那么最终应该会得到一个只包含JSP/HTML标记的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;
    }
}