2011-08-19 131 views

回答

2

給JSP一個具有該方法的類的實例的引用並調用它。

您可能會問誰是JSP的實例 - 它是模型-2 MVC安排中的servlet。

這裏的流量將如何工作:

  1. 從JSP提交一個GET/POST請求的servlet。
  2. Servlet作用於該請求並代表JSP執行一些工作。將所有必要的對象放入請求,會話或其他合適的範圍中。
  3. Servlet將對下一個JSP的響應路由,它可能與請求的JSP相同。
  4. 沖洗,重複。
0

如果您使用的是JSF,則可以在View Scope中將bean用作模型,並從數據源自動加載。如果您使用的是JSP,那麼使用TLD標籤怎麼樣?並使用JSTL標籤<c:foreach>?它可以節省會話中保存的內存,或保存會話並在加載事件完成時將其刪除?一些如何像這樣(JSTL + TLD)

<c:forEach items="${myTag:getProductByPage(page)}" var="p"> 
    Product name: ${p.productName} 
</c:forEach> 
+0

我正在使用struts tiles.could你請elebrote它是解釋,更多的是我們需要調用一個接受參數的metod,這裏它將是在JSP中設置的ollean值。 –

55

您只能調用與參數的方法在EL如果您的目標和運行一個Servlet 3.0兼容的容器(例如Tomcat的7,Glassfish的3,JBoss AS中6等)與web.xml聲明符合Servlet 3.0。這個servlet版本隨EL 2.2一起提供,它允許用參數調用任意實例方法。

假設你在指有一個方法類似public Object[] getArray(String key)一個類的實例範圍已經一個${bean},那麼你應該能夠做到這一點:

<c:forEach items="${bean.getArray('foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 
與另一

,甚至變量作爲參數

<c:forEach items="${bean.getArray(foo)}" var="item"> 
    ${item} <br /> 
</c:forEach> 

但是,如果你不針對一個Servlet 3.0容器,那麼你就不能調用帶有參數的方法EL可言。你最好的選擇就是按照Duffymo的建議,在預處理servlet中完成這項工作。

Object[] array = bean.getArray("foo"); 
request.setAttribute("array", array); 
// ... 

作爲一個完全不同的選擇,您可以創建一個委託方法調用的EL函數。你可以在this blog的底部附近找到一個開球的例子。你想落得像的東西:

<c:forEach items="${util:getArray(bean, 'foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 

public static Object[] getArray(Bean bean, String key) { 
    return bean.getArray(key); 
} 
+1

我正在做與請求對象類似的東西,調用'isUserInRole('role')'但是Eclipse認爲這是一個get方法,並且抱怨getIsUserInRole()方法不存在。你知道如何解決這個問題嗎?我正在使用glassfish v3。謝謝,D. – Daniel

+2

@Daniel:對於EL語法檢查和驗證,Eclipse很薄弱。只需在Eclipse中禁用EL驗證,或者安裝JBoss Tools。 – BalusC

+0

謝謝。我禁用它,它工作。 – Daniel

4

對我來說,上述方案沒有工作。 我在我的java類中有一個函數getRemitanceProfileInformation(user)。 我創建的Java類的useBean的,然後調用

<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/> 

和它的工作。

+3

錯誤的參考資料,當您回答時,誰知道哪個是*上面的*解決方案。 – madth3