Как перевести сервлет JSP, который вызывает метод объекта, в JSTL? - PullRequest
1 голос
/ 02 марта 2012

Я только начал использовать JSTL для своего проекта, но, к сожалению, могу сказать, что это действительно сбивает меня с толку.

Я изначально использовал Number.java

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

И в showNumber.jsp iмог бы просто использовать

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

и встроенный <%= Number.add(5,6) %>

Как мне переписать эту часть в JSTL?Можно ли импортировать класс Number.java?Я пробовал так много разных вещей, например <c:out value="${Number}.add(5,6)" />, но все еще не могу найти решение.Благодарю.


Отредактировано: я использую подход Виктора, и он работает.В моем случае мне нужно повторно использовать переменную чужого из среды Spring, скажем, NumberTwo.java и totalTwo как частную переменную внутри.И добавил "100" к этому totalTwo.

. Для источника, где мне нужно его использовать, это <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 ]

1 голос
/ 02 марта 2012

К сожалению, невозможно произвольно вызывать методы с помощью 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 is: $ {result} " работает только с JSP 2 afaik.

0 голосов
/ 02 марта 2012

Пожалуйста, посмотрите на функции EL в ответе BalusC на
Скрытые функции JSP / Servlet
также смотрите на "Использование пользовательских методов в EL" на
http://www.roseindia.net/jstl/jstl-el.shtml
посмотрите на функции на
http://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html

0 голосов
/ 02 марта 2012

Вы можете использовать тег '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"
  }
}

CREDIT TO: http://www.herongyang.com/jsp/usebean.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...