2012-03-02 86 views
1

我剛剛開始爲我的項目使用JSTL,但很抱歉說我真的很困惑。如何將調用對象方法的JSP servlet轉換爲JSTL?

我最初使用Number.java

package com.mycompany 
public class Number { 
    private int total; 
    public static int add (int x, int y) { 
    return total; 
} 

而且在showNumber.jsp我可以只使用

<%@page import= "com.mycompany.Number" %> 

和在線使用<%= Number.add(5,6) %>

我怎樣才能在JSTL重寫這個部分? 是否有可能導入類Number.java? 我嘗試了很多不同的東西,例如<c:out value="${Number}.add(5,6)" />,但仍無法找到解決方案。謝謝。


編輯: 我使用@ Victor的方法,它確實有效。在我的情況下,我需要重用Spring框架中的其他變量,如NumberTwo.javatotalTwo作爲私有變量。並在此totalTwo中加上「100」。

對於我需要使用它的src是<spring:param name="secondNumber" value ="${NumberTwo.totalTwo}" />

然而,直覺上我使用(int) pageContext.getAttribute("NumberTwo.totalTwo"),它總是返回我null

另一個解決方法是 第一<c:set var="result" value="${NumberTwo.totalTwo}" /> 然後<% String result = (String) pageContext.getAttribute("result"); %> 然後<%= Number.add(result, 100) %>

+0

pap 2012-03-02 09:30:55

+0

'add'只是函數使用的一個簡單示例 – Richard 2012-03-03 05:08:00

回答

1

不幸的是,用JSTL任意調用方法是不可能的,JSTL的功能非常有限:http://docs.oracle.com/javaee/5/tutorial/doc/bnalg.html。但它仍然可以使用您的類號碼類。這裏的解決方法:

<%@page import= "com.mycompany.Number" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<% 
    pageContext.setAttribute("addResult", Number.add(7, 8)); 
%> 
<html> 
<body> 
    JSP 1.x: Result is: <c:out value="${addResult}" /><br/> 
    JSP 2.x: Result is: ${addResult} 
</body> 
</html> 

隨着pageContext.setAttribute()方法結果存儲在頁上下文,以及JSTL標籤可以訪問存儲在這方面的值(屬性)。

注意:第二個輸出行「結果是:$ {result}」僅適用於JSP 2 afaik。

+0

非常感謝。這確實有很大的幫助。我的一個相關問題是,我可能需要在scriptlet中重複使用這個'$ {addResult}'。例如,'Number.add(「$ {addResult},」7「)'。基於這個解決方法,我想知道如何使用JSTL中的東西回到scriptlet。謝謝。 – Richard 2012-03-03 02:45:16

+0

我想我可以使用'' )pageContext.getAttribute(「addResult」)'重用這個變量(可能不是一個標準方法)。然而,新問題是,當我與其他人一起工作時,我無法使用'pageContext'通過'getAttribute如果這是一個正確的方法,我怎麼能知道'getArribute'? – Richard 2012-03-03 04:48:31

+0

我找到一種解決方法: 'foo.java'的源==>和'bar'(私有變量)放在''。如果我想'$ {foo.bar}'並嘗試'(String )pageContext.getAttribute(「foo.bar」)',它總是返回我'null'。解決方案==>第一個'那麼'<%String result =(String)pageContext.getAttr ibute( 「結果」); %>'在我的scriptlet中重用'result'之前。這種方法可行,但在'.getAttribute' – Richard 2012-03-03 05:04:36

0

您可以使用 'useBean的' 標籤如下面的例子:

<?xml version="1.0"?> 
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="1.2"> 
<!-- UseBean.jsp 
    Copyright (c) 2002 by Dr. Herong Yang 
--> 
<html><body> 
<jsp:directive.page import="CacheBean"/> 
<jsp:useBean id="b" class="CacheBean"/> 
<jsp:setProperty name="b" property="text" value="Hello world!"/> 
Property from my Bean: 
<jsp:getProperty name="b" property="text"/> 
<br/> 
Info from my Bean: 
<jsp:expression>b.getInfo()</jsp:expression> 
</body></html> 
</jsp:root> 

其中:

/** 
* CacheBean.java 
* Copyright (c) 2002 by Dr. Herong Yang. All rights reserved. 
*/ 
public class CacheBean { 
    private String text = "null"; 
    public String getText() { 
    return text; 
    } 
    public void setText(String text) { 
    this.text = text; 
    } 
    public String getInfo() { 
    return "My JavaBean - Version 1.00" 
    } 
} 

信用:http://www.herongyang.com/jsp/usebean.html

+0

謝謝,但我可能仍然需要與其他人的EF變量(如'$ {xxxx}')交互。我希望我能知道如何在jsp:usebean中重用這樣的變量。 – Richard 2012-03-03 05:43:52

相關問題