私は、VelocityToolboxViewを使用しています(ここではstackoverflowでsomwhereが見つかりました)。春3のVelocity-Tools 2.0を使用しています。 設定がうまくなっているようですが、.vm私はNPEを取得します。 Velocity-Toolsのソースをスキャンすると、ValueParserのプロップからのリクエストとレスポンスでツールを設定しようとしていますが、ここではnullになっています。ここでSpring 3アプリのVelocity-Tools - LinktoolがNPEを解決する方法を教えてください。
スタック:
LinkTool.configure(ValueParser) line: 100
LinkTool(SafeConfig).configure(Map) line: 113
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
ToolInfo.invoke(Method, Object, Object) line: 363
ToolInfo.configure(Object, Map<String,Object>) line: 294
ToolInfo.create(Map<String,Object>) line: 255
Toolbox.getFromInfo(String, String, Map<String,Object>) line: 152
Toolbox.get(String, String, Map<String,Object>) line: 112
ToolContext.findTool(String) line: 221
ToolContext.get(String) line: 206
VelocityContext(AbstractContext).get(String) line: 197
ValueParserはこの正常に注入し、誰がされた場合、現時点ではそのマップ内の要求/応答値を持っている必要がありますか?ここで
は、私が使用してビュークラスです:
public class VelocityToolsView extends VelocityToolboxView
{
private static ToolContext toolContext;
@Override
protected Context createVelocityContext(@SuppressWarnings("rawtypes") Map model,
HttpServletRequest request, HttpServletResponse response) throws IOException
{
VelocityContext context = new VelocityContext(getToolContext());
if (model != null)
{
@SuppressWarnings("unchecked")
Set<Map.Entry<String, Object>> entrySet = model.entrySet();
for (Map.Entry<String, Object> entry : entrySet)
{
context.put(entry.getKey(), entry.getValue());
}
}
return context;
}
private ToolContext getToolContext() throws IllegalStateException, IOException
{
if (toolContext == null)
{
XmlFactoryConfiguration factoryConfiguration = new XmlFactoryConfiguration("Default Tools");
factoryConfiguration.read(getServletContext()
.getResourceAsStream(getToolboxConfigLocation()));
ToolManager toolManager = new ToolManager();
toolManager.configure(factoryConfiguration);
toolContext = toolManager.createContext();
}
return toolContext;
}
しかし私はあなたのページのテンプレートクラスから私のクラスを派生させました。コードを比較すると、静的フィールドの遅延読み込みだけで、ほぼ同じことが行われます。この問題は、ToolContextが$ linkツール(org.apache.velocity.tools.view.LinkTool.javaの84〜103行目)を設定しようとしたときに、toolPropsの要求と応答を期待しているため、LinkToolが機能しなくなるという問題があります。 – Kai
@カイ同じではありません。あなたが間違った方法を使っていることを意味するあなたのコードの中に 'Toolbox'という単語があります。ツールボックスに関連するものは使用しないでください。 – serg
上記のクラスを更新しましたが、まだ問題があります。 – Kai