如何将调用对象方法的JSP servlet转换为JSTL?

时间:2012-03-02 06:12:13

标签: java jsp jstl

我刚开始使用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) %>

3 个答案:

答案 0 :(得分:1)

不幸的是,不可能随意使用JSTL调用方法,JSTL的功能非常有限:http://docs.oracle.com/javaee/5/tutorial/doc/bnalg.html。但仍然可以使用 Number 类。解决方法:

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

答案 1 :(得分: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

答案 2 :(得分:0)

请查看BalusC答案中的EL功能 Hidden features of JSP/Servlet
也 看看“在EL中使用自定义方法” http://www.roseindia.net/jstl/jstl-el.shtml
看看中的功能 http://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html