2013-04-21 126 views
3

对于Java和JSTL,我真的很陌生,所以很抱歉,如果这是一个超级简单的问题。我试图通过一个我在网上找到的例子来让它起作用,但我似乎遇到了问题。假设发生的是你创建一个java bean并从java bean中访问属性。但相反,我得到一个空指针异常就行了,我打电话在JSTL的类jsp:useBean id =“students” class =“com.beans.Students”。这里是java类:将Java bean属性传递给JSTL

package com.beans; 

public class Students implements java.io.Serializable 
{ 
    private String firstName = null; 
    private int age = 0; 

    public Students() { 
    } 
    public String getFirstName(){ 
     return firstName; 
    } 
    public int getAge(){ 
     return age; 
    } 
    public void setFirstName(String firstName){ 
     this.firstName = firstName; 
    } 
    public void setAge(Integer age){ 
     this.age = age; 
    } 
} 

JSTL中,我试图访问的Java bean:

<jsp:useBean id="students" 
       class="com.beans.Students"> 
<jsp:setProperty name="students" property="firstName" 
       value="Zara"/> 
<jsp:setProperty name="students" property="age" 
       value="10"/> 
</jsp:useBean> 

<p>Student First Name: 
<jsp:getProperty name="students" property="firstName"/> 
</p> 

<p>Student Age: 
<jsp:getProperty name="students" property="age"/> 
</p> 

堆栈跟踪:

Caused by: org.apache.sling.api.SlingException: An exception occurred processing JSP page /students.jsp at line 18 
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.handleJspExceptionInternal(JspServletWrapper.java:574) 
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:499) 
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) 
at org.apache.sling.scripting.jsp.JspServletWrapperAdapter.service(JspServletWrapperAdapter.java:59) 
at org.apache.sling.scripting.jsp.JspScriptEngineFactory$JspScriptEngine.eval(JspScriptEngineFactory.java:453) 
at org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:358) 
... 174 more 
Caused by: java.lang.NullPointerException 
at org.apache.sling.scripting.jsp.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:322) 
at org.apache.sling.scripting.jsp.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:308) 
at org.apache.jsp.students_002d_jsp._jspServ 

任何帮助,不胜感激!

+0

对不起@Reimeaus我真的很陌生这是什么意思,通过初始化?基于我的代码是不是已经被初始化了? – 2013-04-21 17:25:51

+0

请粘贴整个stackTrace(),代码看起来OK! – NINCOMPOOP 2013-04-21 17:27:40

+0

谢谢@NoobUnChained我粘贴了堆栈跟踪。 – 2013-04-21 17:33:25

回答

9

如果你已经把一个Students对象的请求,你的servlet做这样的事情request.setAttribute("students", myStudentObject);,那么JSTL相当于你有你的网页上看到的将是这样:

<p>Student First Name: <c:out value="${students.firstName}"/></p> 

<p>Student Age: <c:out value="${students.age}"/></p> 

确保您包括在您的页面像这样的顶级JSTL核心标签:

<%@ taglib prefix="c" 
     uri="http://java.sun.com/jsp/jstl/core" %> 

使用c:out标签是好的,如果你需要担心XSS攻击,但如果这不是一个问题,你可以直接跳过c:out标签,并使用像这样的EL表达式:

<p>Student First Name: ${students.firstName}</p> 

<p>Student Age: ${students.age}</p>