如何使用JSTL启动静态函数?怎么读字符串?

时间:2011-12-05 16:34:47

标签: java jsp jstl

假设我有这样一个类:

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);
    }
}

首先,我想知道如何使用JSTL在MyClass类中启动函数“startMe”?没有更多,只需启动此功能。然后如何在函数“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 个答案:

答案 0 :(得分:3)

如果不使用预处理servlet或像JSF这样的MVC框架,就不能干净利落地做到这一点。 <jsp:useBean>仅提供获取/设置模型值的工具。而已。它绝对不能取代MVC的Controller部分。

您可以通过在getter中引入延迟加载或在setter中执行延迟来解决此问题。

E.g。懒加载:

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" />

请记住,这是一个丑陋的黑客。你应该真正研究servlet或MVC框架。如果你还是新手,那就从一个简单的servlet开始吧。有关一些hello world示例,另请参阅our servlets wiki page。请注意,当您使用servlet时,您需要需要<jsp:useBean>并再次加入。

您的具体功能要求实际上并不清楚。特别是在会话范围bean中使用公共静态方法令人困惑。如果您确实想在webapp的启动时调用方法,请使用ServletContextInitializer#contextInitialized()。或者,如果要在创建会话时调用方法,请使用HttpSessionListener#sessionCreated()

哦,你的豆子设计不正确。它应该有一个(隐式)无参数默认构造函数。