2011-01-25 17 views
0

これは、構文的には同じですが、私が作成しているWebページの一部では上書きされるので、実際には混乱するエラーです。JSTLタグはJavaScript呼び出しとHTML要素でヌル/空を返します

例えば、これは表示されません:タグ${field['POLL_FIELD_ENTER_QUESTION']}は、文字列を返す必要があります

  <main:uiInputBox 
       onDarkBG="${hasDarkBG}" 
       name="questionTitle1" 
       onblur="pollUpdateQuestion(false, false, true, this);" 
       defaultValue="&lt;${field['POLL_FIELD_ENTER_QUESTION']}&gt;" 
       styleWidth="280px"> 
      </main:uiInputBox> 

「質問を入力してください」。私が理解していないことは、タグがJSPファイル内の文字列を通常はHTMLの記述子にあるときに返すことです。

それは文字列リテラル"${field['POLL_FIELD_CHOICE']}"はなく、それが表現だという要素を出力:

別のエラーはJavaScriptで私はこのような機能を持っている場合ということです。例:

私はここで間違っていますが、どうすれば修正できますか?

+0

どこJavascriptがありますか?それは別のファイルですか?また、 'フィールド'とは何ですか?それは '地図ですか?もしそうなら、 'Map'のキーはどんなタイプですか?それは 'String'ですか? –

+0

これは、同じサーバー内のページでも、異なるサーバー環境のアプリケーション間でも異なりますか?そして、どのバージョンのJSPサーブレット・エンジンについて話していますか? – Pointy

+0

申し訳ありませんが、私は詳しく説明します。 "field"はのマップです。 javascriptは.JSPファイルの中にあります。私は、キーと値のペアが存在することを確認しました。しかし、javascriptでは空の/ nullを返します。 – SachaK

答えて

0

カスタムタグで解決されないELの最初の問題点は、JSTL(これはタグ)ではありません。それはELです(それらの${}もの)。

カスタムタグでELを使用しているようです。 <main:xxx>はJSPの標準タグライブラリには属していません(JSTLの略です)。同様に動作するカスタムタグでELを取得するには、次のことを確認する必要があります。

  • web.xmlを宣言する必要があります。この機能がサポートされているJSP 2.0意味少なくともサーブレット2.4、など。

    <web-app 
        xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
        version="2.4"> 
    
  • <main:xxx>タグライブラリの.tldファイルは<rtexprvalue>属性がサポートされている少なくとも JSP 2.0、として宣言されなければなりません。

    <taglib 
        xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
        version="2.0"> 
    
  • <main:uiInputBox>.tldファイル内defaultValue属性がサポートランタイム式(EL、それらの${}もの)を有効にする<rtexprvalue>true</rtexprvalue>でマークする必要があります。 ELの第二の問題は、JavaScriptファイル内で解決されないよう

    <attribute> 
        <name>defaultValue</name> 
        <rtexprvalue>true</rtexprvalue> 
    </attribute> 
    

、よく、説明は非常に単純です:テンプレートテキスト内ELそれは、JSP(2.0以降)で実行されるようにファイルは.jsp拡張子のみです。

<%@page contentType="text/javascript" %> 
  • JSのその部分を入れてください:

    • .jsp.jsの名前を変更し、ページ(最適なソリューション)の先頭に次の行を追加します。それは、とにかく仕事を得るには、いくつかの方法があります。代わりにJSPページのインライン<script>(一般的には貧弱なプラクティスと見なされるのでお勧めしません)にあります。 (必ずしもjspのサーブレット名にマッピングすることはできませんservletcontainerの特定のJspServletにはお勧めしません、それタイトカップルあなたのWebアプリケーション)web.xmlでのJSPサーブレットの

    • 地図*.js

      <servlet-mapping> 
          <servlet-name>jsp</servlet-name> 
          <url-pattern>*.js</url-pattern> 
      </servlet-mapping> 
      
  • +0

    2番目の問題のためにあなたの提案(最善の解決策)を試みましたが、文字列はもはやリテラルとして読み込まれません。代わりに、マップからオブジェクトを呼び出すと空白が返されます。 – SachaK

    +0

    その時点で地図は空です。それはセッション/アプリケーションスコープの代わりにリクエストスコープに入れられていますか?その前にマップを作成するサーブレットを持っていても構いません。または少なくともその地図を要求範囲に入れる責任がある人は誰でも構いません。 – BalusC

    関連する問題