如何使用 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 和任何标签 类这比在表示层中包含逻辑更容易编写、理解和维护。
这对我来说是第一次 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 和任何标签 类这比在表示层中包含逻辑更容易编写、理解和维护。