3

私は人の姓を持つオブジェクトフィールドを持っています。

${person.lastName}を使用すると、 O'Brianを取得します

私が使用する場合

 <c:out value="${person.lastName}"/> 

私はオブライエンを取得します

どちらの出力も IE の次の jsp コードを壊します

 <a href="#" 
    class="delete" 
    onclick="if(confirm('<c:out value="${application.lastName}"/> ' + _('Are you sure you want to delete this application?'))) {deleteApplication('${application.identifier}')};return false;"><bean:message key="application.delete"/></a>

に変形するからです。

    onclick="if(confirm('O&#039;Brian '

また

    onclick="if(confirm('O'Brian '

O'Brian としてO'Brianをエスケープする必要があります

この問題を解決する方法はありますか?

解決

最も洗練されたソリューションは、単純なタグを使用しているようです。

package view;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class EscapeJS extends SimpleTagSupport {
    public String str;

    public void doTag() throws JspException, IOException {
        getJspContext().getOut().print(str.replaceAll("\'", "\\\\'"));
    }

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

}

次に、WEB-INF に utils.tld ファイルを配置します。

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
    <tlibversion>1.2</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>bean</shortname><uri>utilsTags</uri>
    <uri>utilsTags</uri>
    <tag>
        <name>escapeJS</name>
        <tagclass>view.EscapeJS</tagclass>
        <bodycontent>scriptless</bodycontent>
        <attribute>
            <name>str</name>
            <required>true</required>       
            <rtexprvalue>true</rtexprvalue> 
        </attribute>                
    </tag>      
</taglib>

次に、jsp 内で次のようにします。

<%@ taglib prefix="utils" uri="utilsTags" %>

<utils:escapeJS str="${application.firstName}"/>
4

2 に答える 2

1

データベースに O'brian として保存しますが、表示する前に検索置換を実行して ' を \' に変換します

于 2009-06-19T19:21:45.253 に答える