gpt4 book ai didi

java - 如何使用 JSTL 启动静态函数?如何读取字符串?

转载 作者:行者123 更新时间:2023-12-02 00:33:36 25 4
gpt4 key购买 nike

假设我有一个这样的类(class):

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 变量中(或者其他东西,这样我以后就可以使用这个对象)。

我只知道我需要 Beans。之后不知道如何将它与 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>

谢谢

最佳答案

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

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

例如延迟加载:

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 开始。另请参阅our servlets wiki page一些 hello world 的例子。请注意,当您使用 servlet 时,您不需要需要 <jsp:useBean>和配偶了。

你的具体功能需求其实还不清楚。特别是在 session 作用域 bean 中使用公共(public)静态方法会令人困惑。如果您确实想在 webapp 启动时调用方法,请使用 ServletContextInitializer#contextInitialized() 。或者,如果您想在创建 session 时调用方法,请使用 HttpSessionListener#sessionCreated() .

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

关于java - 如何使用 JSTL 启动静态函数?如何读取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8388563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com