2011-09-15 12 views
1

私は、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; 
    } 

答えて

1

VelocityToolboxは、5年前に廃止されました古来からのものです。私はthis techniqueを使ってToolsをSpringに統合しています。

+0

しかし私はあなたのページのテンプレートクラスから私のクラスを派生させました。コードを比較すると、静的フィールドの遅延読み込みだけで、ほぼ同じことが行われます。この問題は、ToolContextが$ linkツール(org.apache.velocity.tools.view.LinkTool.javaの84〜103行目)を設定しようとしたときに、toolPropsの要求と応答を期待しているため、LinkToolが機能しなくなるという問題があります。 – Kai

+0

@カイ同じではありません。あなたが間違った方法を使っていることを意味するあなたのコードの中に 'Toolbox'という単語があります。ツールボックスに関連するものは使用しないでください。 – serg

+0

上記のクラスを更新しましたが、まだ問題があります。 – Kai

0

私もこの問題を発見していましたが、最終的に@ sergの手法でthisバリエーションを使用して解決しました。

関連する問題