java - 将 java bean 属性传递给 JSTL

标签 java jstl

我真的是 Java 和 JSTL 的新手,如果这是一个 super 简单的问题,我很抱歉。我试图举一个我在网上找到的例子并让它工作,但我似乎遇到了问题。所有假设发生的是您创建一个 java bean 并从 java bean 访问属性。但相反,我在 JSTL jsp:useBean id="students"中调用类的那一行得到了一个空指针异常 class="com.beans.Students"。这是 java 类:

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;
    }
}

我试图在其中访问 Java bean 的 JSTL:

<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

非常感谢任何帮助!

最佳答案

如果您在 servlet 的请求中放置了一个 Students 对象,执行类似 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" %>

如果您需要担心 XSS 攻击,使用 c:out 标签是个不错的选择,但如果这不是问题,您可以跳过 c:out 标签并使用这样的 EL 表达式:

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

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

关于java - 将 java bean 属性传递给 JSTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16133956/

相关文章:

list - JSTL 集合和列表 - 检查集合中是否存在项目

java - Hibernate:如何定义映射值列名称?

java - 如何匹配 ArrayList<String> 中的精确字符串

java - 抑制 Java Ctrl+Break 行为

java - for循环到jSTL forEach

java - JSP/JSTL 中的嵌套表达式

java - deeplearning4j word2vec 输出词 vector

java - 方法中变量重复的目的是什么?

jsf - JSF 中 JSTL 标记的替代方案

java - 评估 JSTL 中的 list.contains 字符串