Как запустить статическую функцию с JSTL?Как читать строку? - PullRequest
0 голосов
/ 05 декабря 2011

Допустим, у меня есть такой класс:

public class MyClass {

    private String name;

    public MyClass(final String name) {
        this.name = name;
    }

    public static void startMe() {
        //do something
    }

    public static String gimmeString() {
        //do something
        return "myString";
    }

    public MyClass getObject(final String name) {
        //do something
        return new MyClass(name);
    }
}

Сначала я хотел бы узнать, как запустить функцию "startMe" в классе MyClass с помощью JSTL?Ничего больше, просто запустите эту функцию.Тогда как запустить И отобразить строку в функции "gimmeString".Наконец (да, это выглядит забавно) Я хотел бы получить доступ к функции getObject (name) И сохранить ее в переменной JSTL (или что-то еще, чтобы я мог использовать этот объект позже).

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

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="start" scope="session" class="com.MyClass"/>
<%-- and now? <c:?? --%>
</body>
</html>

Спасибо

1 Ответ

3 голосов
/ 05 декабря 2011

Вы не можете сделать это чисто без использования сервлета предварительной обработки или инфраструктуры MVC, такой как JSF.<jsp:useBean> предлагает только средства для получения / установки значений модели.Ничего более.Он может абсолютно не вытеснить часть контроллера MVC.

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

Например, ленивая загрузка:

public String getString() {
    if (string == null) {
        start();
    }

    return string;
}

с

${start.string}

или ленивым выполнением:

public void setString(String string) {
    if (this.string == null) {
        start();
    }

    this.string = string;
}

с

<jsp:setProperty name="start" property="string" value="somevalue" />

Имейте в виду, что это уродливый хак.Вы должны действительно посмотреть на сервлеты или MVC фреймворкиЕсли вы все еще новичок, начните с простого сервлета.См. Также на нашей вики-странице сервлетов , где приведены примеры из всего мира.Обратите внимание, что когда вы используете сервлеты, вы не нуждаетесь в <jsp:useBean> и больше не поддерживаете.

Ваше конкретное функциональное требование на самом деле неясно.В частности, использование открытого статического метода в bean-объекте сессионной области сбивает с толку.Если вы действительно хотите вызвать метод при запуске веб-приложения, используйте ServletContextInitializer#contextInitialized().Или, если вы хотите вызвать метод при создании сеанса, используйте HttpSessionListener#sessionCreated().

О, дизайн вашего бина неправильный.Он должен иметь (неявный) конструктор по умолчанию без аргументов.

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