gpt4 book ai didi

java - 速度+ Spring

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:12 25 4
gpt4 key购买 nike

我正在尝试使用上述组件设置一个网络应用程序。除了集成 Spring 和 Velocity 工具的最后一个障碍,我已经跳过了所有障碍。我看到了this post今天早上,并更新了与提供的答案略有不同的答案。但是,一旦我尝试添加 ParameterTool像这样到我的模板之一:

#foreach( $key in $params.keySet() )
$key = $params.getValue($key)
<br />
#end

我收到 NPE java.lang.UnsupportedOperationException:请求为空。必须先初始化ParameterTool!根据我读到的内容,这意味着工具配置正确,只是它无权访问请求。注意:我也收到了接受的解决方案的错误。

有没有人能够成功地将这些工具与 Spring 一起使用?似乎这是一个已知的缺陷,因为这个 Open Jira SPR-5514 有一个 Open Jira

最佳答案

The accepted answer 的略微修改版本来自 this question解决了这个问题。

您需要返回 ViewToolContext 而不是返回 ViewContext。您还需要准备工具箱并根据需要在 session /请求中设置它们:

您需要以您需要的任何方式初始化 toolContext(查看我提供的答案 here 了解如何使用更新的 API 执行此操作,因为您将需要访问 ToolboxFactory。

修改后的 createVelocityContext 方法现在需要在按以下方式创建 ViewToolContext 之前准备工具箱:

protected Context createVelocityContext(Map <String, Object> model, 
HttpServletRequest request,
HttpServletRespsone response)
throws Exception {

initVelocityContext(); //Still keep toolContext static
//will need to also add this to
//the servletContext -- left as an exercise
prepareToolboxes(request, response);
Context context =
new ViewToolContext(getVelocityEngine(), request,
response, getServletContext());
//Set model attrs to context
....
return context;
}

private void prepareToolboxes(final HttpServletRequest request,
final HttpServletResponse response) {
String key = Toolbox.class.getName();
if (factory.hasTools(Scope.REQUEST && request.getAttribute(key) == null) {
Toolbox requestTools = factory.createToolbox(Scope.REQUEST);
request.setAttribute(key, requestTools);
}
if (factory.hasTools(Scope.SESSION) {
HttpSession session = request.getSession();
synchronized(factory) {
//Follow pattern from above
}
}
}

关于java - 速度+ Spring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5033541/

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