假设我有这样一个类:
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>
谢谢
答案 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()
。
哦,你的豆子设计不正确。它应该有一个(隐式)无参数默认构造函数。