1

セットアップ: iMac 10.6.8、Apache Tomcat 6.0.16、eXist データベース、JSP、Java、XML

ユーザーからのキーワード要求を受け取り、XML コンテンツを返すために使用される JSP ページがあります。

ユーザーに返されたタイトル XML タグの内容に応じて、外部 Java プロジェクトから取得した追加のコンテンツも表示しようとしています。

XML コンテンツをプルする JSP

<div class='result-container'>
<%          
            (more code here to call content from XML database and transform)

            content = AE.getPrettyModelContent("ae", username + "transformedFeatureModel");
            out.println(content);
%>
</div>

このコンテンツは、スタイリングに使用されるタグの真正性とともに出力されます。

<title>France</title>

として出力されます

<div id="title">France</div> 

上記の出力タグの内容に応じて、JSP ページで別のアクションを実行しようとしています。

これまでの私の試み

<div class='concept-container'>
<%

Injector injector = Guice.createInjector(new GuiceInjector());
ConceptConnector myConceptFrance = injector.getInstance(ConceptConnector.class);

if (div id="title" == France)
{
out.println(myConceptFrance.search(myConceptFrance));
} 

%>
</div>

エラー

An error occurred at line: 150 in the jsp file: /SimpleResponse2.jsp
div cannot be resolved
149: 
150:    if (div id="title" == France)
151:    {
152:    out.println(myConceptFrance.search(myConceptFrance));
153:    }

私がやろうとしていることが可能であると100%確信しているわけではなく、それに関する多くの情報がないようです. 誰かがヒントを与えることができれば、それは非常に高く評価されます。

4

2 に答える 2

2

質問を完全には理解していないかもしれませんが、に基づいて: if (div id="title" == France)HTML を解析して編集しようとしているように聞こえますout.println(content);これは不可能です(出力 HTML を Java に読み戻すことはできません)。考慮すべき回避策がいくつかあります。

  1. 「コンテンツ」を変数 Java 変数として保存し、後で比較する際に使用します (単純化して、必要なデータの部分のみを保存します)。ただし、スケーリングすると問題が発生する可能性が高いと思います。
  2. ページに何かを出力する前に、比較とチェックをすべて同じコード ブロックに入れます。
  3. AJAX を使用して後のロジックを処理します -- (Javascript を使用してページ上の特定の機能をチェックし、それに基づいて動作するコントローラー サーブレットを呼び出す場合があります)
  4. ページに何かを追加したい場合は、 out.println() を直接使用する代わりに、 aStringBufferまたは something を使用して、印刷するもののコピーを保持し、後で検索できるようにします。-- たぶん (印刷後に何かを操作する必要がない場合は、それを実行out.printlnして に書き込むと、StringBuffer検索できます。以下を参照してください。

    public static void main(String[] args){
        StringBuffer sb = new StringBuffer();
        sb.append("<div id=\"additionalData\">Italy</div> <div id=\"title\">France</div> ");
        System.out.println(sb.indexOf("id=\"title\">France</div>") > -1); // output true
        System.out.println(sb.indexOf("id=\"title\">Italy</div>") > -1); // outputs false
    
    }
    

他の解決策もあると思いますが、それが私がすぐに思いつくものです。お役に立てれば。

于 2012-07-11T18:18:25.670 に答える
1

変換を使用して XML を読み取り、条件文とjsp:scriptletを使用して命令を追加します。これは次のようになります。

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page">
<!--...-->

 <xsl:template match="title">
  <!-- Output div with ID and value-->
  <div id="local-name(.)"><xsl:value-of select="."/></div>
  <!-- Check for France -->
  <xsl:if test="current() = 'France' ">
    <!-- Call instruction using scriptlet -->
    <jsp:scriptlet>out.println(myConceptFrance.search(myConceptFrance));</jsp:scriptlet>
  </xsl:if>
 </xsl:template>

より複雑なロジックには、代わりにmode 属性を使用してください。

于 2012-07-12T00:37:26.607 に答える