2011-07-30 10 views
1

私のアプリケーションでは、私はstruts 2を使用しています。私たちはjQueryを使ってAJAX呼び出しを送ります。私はStruts 2のアクションクラスでXMLデータをフォーマットし、XMLレスポンスとしてAJAXリクエストに送信しています。私はこれに似たStrutsアクションでXMLデータをフォーマットしています:StrutsアクションクラスからXML要素のハードコードを削除する

<person> 
    <age> 

    </age> 

    <city> 

    </city> 
</person> 

私は別のXMLファイルには、このXMLデータを移動さを探しています何。誰かがVelocityを使ってXMLを動的に作成できると私に言った。誰か助けてくれますか?サンプルコードは非常に高く評価されます。ありがとう!

+0

あなたは、特にその技術を述べたので、私は速度のタグを追加しましたが、あなたに利用可能なオプションの数があります。 –

答えて

0

利用可能なオプションはいくつかあります。まず、JSPを使用してXMLを出力できます。これを行うには、次のようにちょうどJSPを始める:

<?xml version="1.0" encoding="UTF-8"?> 
<%@ page contentType="text/xml;charset=UTF-8" language="java" %> 

また、あなたはまた、そのような速度やFreemarkerのようテンプレート言語を使用することができます。

最後に、別のアプローチのために、XMLストリーミングAPI(javax.xml.streamパッケージ)を使用すると、プログラムでXMLを構築できます。

ビュー層ですでにJSPを使用している場合、XML出力にJSPを使用するのが最も簡単な方法です。それ以外の場合は、ストリーミングAPIをご覧ください。 VelocityとFreemarkerはともに優れたテンプレート言語ですが、特にHTMLを生成するために何か他のものを使用している場合は、XMLを生成するために個人的には使用しません。ここで

+0

私はajaxコールバック関数でxmlデータを読み込んでいます。そのため、アクションクラスにハードコードされたxmlデータを置かないようにしたいのですが、それ以外はどこに置くことができますか?提案してください。 – user870348

0

ツールでベロシティを初期化し、使用する方法を素早くスナップショットです:

//init velocity 
VelocityEngine velocity = new VelocityEngine(); 
velocity.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, "/path/to/templates/dir/"); 
velocity.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_CACHE, true); 
velocity.init(); 

//init tools 
ToolManager velocityToolManager = new ToolManager(); 
velocityToolManager.configure("velocity-tools.xml"); 

//get template 
Template template = velocity.getTemplate("demo.vm"); //contains ${msg} 

//create context 
VelocityContext context = new VelocityContext(velocityToolManager.createContext()); 

//pass data do context 
context.put("msg", "Hello from Velocity"); 

//process template 
StringWriter sw = new StringWriter(); 
template.merge(context, sw); 

//parsed template as a string 
String parsedTemplate = sw.toString(); 
関連する問題