1

私のページにはリンクがあり、クリックすると2つの引数を持つメソッドが呼び出されます。これらの引数の 1 つに特殊文字 (つまり、' や é など) を含めることができます。そのような変数を渡そうとするとページエラーが発生するため、渡す前にエンコードしようとしています。encodeURIComponent をインラインで呼び出すにはどうすればよいですか?

私はこれをやろうとしています:

<a  title="${facet.toolTipDisplay}" onclick="submitFacet('Company', '${encodeURIComponent(facet.javaScriptVar)}')">

そして、私はエラーが発生しているようです:

SEVERE: Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: /WEB-INF/pages/SearchForm.jsp(831,126) The function encodeURIComponent must be used with a prefix when a default namespace is not specified

免責事項: 私は Web に不慣れで、JSP ページにしかアクセスできず、facet.javaScriptVar が由来する Java クラスにはアクセスできません。

4

2 に答える 2

0

アポストロフィを「\'」(エスケープされたアポストロフィ)に置き換えるだけにすることにしました。私の関数が呼び出されると、エスケープされたアポストロフィは通常のようにアポストロフィに置き換えられます。

HTML内では次のようになります。

// arguments = Company, L\'Oréal (4)
onclick="submitFacet('Company', '${fn:replace(facet.toolTipDisplay, "'", "\\'")}')"

次に、submitFacet関数が呼び出されたときの様子は次のとおりです。

"Company", "L'Oréal (4)"
于 2012-09-18T13:59:24.230 に答える
0

こんにちは、Java または JS を使用して UI コンポーネントをエンコードしようとしていますか? 私が考える最も簡単な方法は、JS 関数を使用することです。エンコード方法は、エンコードする文字に依存します。排他的でないものから、ほとんどのエスケープ(uris には適していません)、encodeUriおよびencodeUriComponent までです。

<a  title="${facet.toolTipDisplay}" onclick="submitFacet('Company', 
    'encodeURIComponent(${facet.javaScriptVar})'">

もっと丁寧にするには、Company と JSTL 変数を渡すだけで、submitFacet 関数内にエンコーディングを適用できます。

あなたのコメントを読んで、JSで処理する前にvaコンテンツをエスケープすることをお勧めします。そうしないと不可能です。

次の 2 つの方法のいずれかを試してください。

onclick="submitFacet('<c:out value="${facet.javaScriptVar}"/>')"  

onclick="submitFacet('${fn:escapeJava(facet.javaScriptVar)}')" 

Apache taglibをインポートするとします。

于 2012-08-31T14:13:17.227 に答える