2012-11-21 24 views
14

Başka bir JSP dosyası içeren bir JSP dosyasına sahibim. İlk JSP, ikinci JSP dosyasına bir Java sınıfının (widget) bir örneğini iletmelidir.jsp: Java sınıfıyla param

ilk JSP:

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

ikinci JSP:

Bu

ben ne var

${param.widget.id} 

sorun bu kodun bir hata (o gelmez diyor sağlamasıdır kimliği bilmiyorum). ".id" kısmını atlarsam, sayfa Java sınıfının Java kodunu yazdırır, yani sınıf doğru bir şekilde aktarılır. Örneğin, $ {widget.id} içindeki ilk sayfanın $ {widget} kuralını değiştirirsem ve $ {param.widget} yazmayı denersem her şey yolunda gider.

Soruma Bir Java sınıfını neden geçemiyorum ve özniteliklerini doğrudan arayamıyorum? Neyi yanlış yapıyorum?

Düzenleme: Hata mesajı: javax.el.PropertyNotFoundException: Neden Olduğu tip java.lang.String bulunmayan Property 'kimliği'

cevap

9

geçmek ${widget} değişkeni isteğe bağlı bir dizgeye (widget.toString()) tercüme edilir. Bu değer daha sonra orijinal java nesnesi olarak değil, ikinci JSP'ye bir String olarak iletilir. nesnenin değerlerini erişmek için

Bir yaklaşım özniteliğin değeri ile parametrenin değerini girer:

${param.widgetId} 

Ayrıca Widget ayarlayabilirsiniz:

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

Sonra ikinci JSP kod feryat kullanmak isteği olarak özniteliği ve ikinci sayfada ${widget.id} veya $ {request.widget.id} olarak kullanın. İkinci yaklaşımı kullanmanızı öneririm. :)

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

Yardımın için hem ederiz Bu yardımın için günümü

+0

Bir sunucu parametresinin yardımıyla bir istek parametresi nasıl ayarlanacağını biliyorum. Bilmediğim, bu parametrenin dahil edilen bir dosyaya nasıl geçirileceğidir. Bunun nasıl başarılacağını açıklayabilir misiniz? –

6

<jsp:param> sadece olabilen bir HTTP isteği parametresi olarak parametreyi geçer Dize. Dolayısıyla, widget'ınızda toString() çağrılır ve bu yöntemin sonucu parametre olarak iletilir.

JSP içeriklerini kullanmak yerine, etiket dosyası olarak uygulanan bir JSP etiketi kullanmalısınız. Bunları nasıl tanımlayacağınız için bkz. http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html. JSP'lerin içinde

<%@ 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 

Etiket kullanımı,:

Örneğin:

Etiket tanımı ile, /WEB-INF/tags/specialWidget.tag içinde

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

Teşekkür kurtardı: –

+0

Örnek için düzenlemelerime bakın. –

10

Aşağıdaki kod ile benim sorunu çözmek başardı. Bunun nasıl çalıştığına dair temel bir örnek verebilir misiniz?Gönderdiğiniz bağlantıyı inceledikten sonra, sorunum için nasıl kullanabileceğimin tamamı açık değil.
+0

Bana yardımcı olan hile, scope = "request" ekliyordu – jeff