JSP:PARAM与Java类(jsp:param with Java class)

2019-08-03 01:58发布

我有一个包含另一个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.id我尝试打印$ {} param.widget,一切工作正常。

我的问题:为什么我不能传递一个Java类,并直接在其属性打电话? 我究竟做错了什么?

编辑:错误消息:javax.el.PropertyNotFoundException:由造成财产“身份证”不是java.lang.String类型发现

Answer 1:

当你传递变量${widget}也被翻译在请求时将一个字符串( widget.toString() 然后,该值被传递给第二JSP作为字符串,而不是原来的Java对象。

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

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

然后使用第二JSP代码波纹管:

${param.widgetId}

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



Answer 2:

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

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

谢谢两位的帮助:)它救了我的一天



Answer 3:

<jsp:param>传递参数作为HTTP请求的参数,它只能是一个字符串。 所以toString()被调用的小部件,而这种方法的结果作为参数传递。

您应该使用JSP标签,作为一个标记文件来实现,而不是使用JSP包括。 见http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html对于如何定义使用它们。

例如:

标签definintion,在/WEB-INF/tags/specialWidget.tag:

<%@ tag %>
<%@ attribute name="widget" required="true" type="the.fully.qualified.name.of.WidgetClass" %>
TODO: add the HTML markup that must be displayed, using ${widget} to access the passed in widget attribute

标签的使用,在任何JSP:

<%@ taglib prefix="myTags" tagdir="/WEB-INF/tags" %>
...
Tada! I will use the specialWidget tag here, with widget as an attribute:
<myTags:specialWidget widget="${widget}"/>


文章来源: jsp:param with Java class