jsp:param with Java class

2022-09-04 00:56:48

我有一个包含另一个 JSP 文件的 JSP 文件。第一个 JSP 应将 Java 类(小部件)的实例传递给第二个 JSP 文件。

这就是我所拥有的:

第一个 JSP:

<jsp:include page="/container/SpecialWidget.jsp">
     <jsp:param name="widget" value="${widget}"/> // widget is a .Java POJO
</jsp:include>

第二个 JSP:

${param.widget.id}

问题是这个代码给出了一个错误(它说它不知道ID)。如果我省略“.id”部分,页面将打印Java类的Java代码,这意味着该类已正确传输。如果我更改第一页的 ${widget} 规则,例如 ${widget.id} 并尝试打印 ${param.widget},一切正常。

我的问题是:为什么我不能传递一个Java类并直接调用它的属性?我做错了什么?

编辑:错误消息:由:javax.el.PropertyNotFoundException:在java.lang.String类型上找不到属性“id”


答案 1

我设法用下面的代码解决了我的问题:

<c:set var="widget" value="${widget}" scope="request" />
<jsp:include page="/SOMEWHERE/SpecialWidget.jsp"/>

谢谢你们的帮助:)它拯救了我的一天


答案 2

当您传递变量时,它将在请求时转换为字符串 ()。然后,此值将作为字符串传递给第二个 JSP,而不是作为原始 java 对象。${widget}widget.toString()

访问对象值的一种方法是使用属性的值设置参数的值:

<jsp:param name="widgetId" value="${widget.id}"/>

然后在第二个 JSP 上使用下面的代码:

${param.widgetId}

您还可以将小部件设置为请求属性,并在第二页上将其用作 ${request.widget.id}。我建议你使用第二种方法。${widget.id}


推荐