簡體   English   中英

jsp:使用Java類的param

[英]jsp:param with Java class

我有一個包含另一個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'

我設法使用以下代碼修復了我的問題:

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

謝謝你們的幫助:)它救了我的一天

當您傳遞變量${widget}它會在請求時被轉換為字符串( widget.toString() )。 然后,此值將作為String傳遞給第二個JSP,而不是原始java對象。

訪問對象值的一種方法是使用屬性的值設置參數的值:

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

然后在第二個JSP上使用以下代碼:

${param.widgetId}

您還可以將窗口小部件設置為請求屬性,並在第二頁上將其用作${widget.id}或$ {request.widget.id}。 我建議你使用第二種方法。

<jsp:param>將參數作為HTTP請求參數傳遞,該參數只能是String。 因此在您的小部件上調用toString() ,並將此方法的結果作為參數傳遞。

您應該使用JSP標記,作為標記文件實現,而不是使用JSP包含。 有關如何定義使用它們的信息,請參見http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html

例如:

標簽定義,在/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}"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM