代码之家  ›  专栏  ›  技术社区  ›  TheNobleSix

如何使用JSP对变量进行初始化和交互

  •  -1
  • TheNobleSix  · 技术社区  · 8 年前

    这是我第一次学习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的方法)设置了basic搜索Bean的私有变量“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;
        }
    }
    

    我在网上找到了一个指南 getListOfStructures() 返回初始化为的变量 final .

    非常感谢您抽出时间!

    1 回复  |  直到 8 年前
        1
  •  0
  •   ewanc    8 年前

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

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

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

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

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