0

私は初心者で、最初の Web アプリケーションを開発しています。複数の言語をサポートしようとしているので、JSTL カスタム タグ ロジックの本文でバンドル ベースのメッセージを使用します。このような:

ResourceBundle rs = ResourceBundle.getBundle("i18n.messages");

JspWriter out = getJspContext().getOut();
try {


out.print("<table><thead>");
        out.print("<th>"+ rs.getString("table.id") +"</th>");
        out.print("<th>"+ rs.getString("table.name") +"</th>");
        out.print("<th>"+ rs.getString("table.entry") +"</th>");
        out.print("<th>"+ rs.getString("table.diagnosis") +"</th>");
        out.print("<th>"+ rs.getString("table.doctor") +"</th>");
        out.print("<th>"+ rs.getString("table.release") +"</th>");
        out.print("</thead><tbody>");

問題は、余分なタグ属性を宣言せずに、このバンドルにロケールを設定する可能性が見つからなかったことです。ちょっと:

<attribute>
  <name>locale</name>
  <required>true</required>
  <rtexprvalue>true</rtexprvalue>
  <type>java.lang.String</type>
</attribute>

その後:

<table:patients locale="${pageContext.request.locale}" />

しかし、ヘッダーに設定したものとは関係なく、常に同じロケール文字列を渡します(デフォルトではブラウザに???)、正しく動作しないようです

<fmt:setLocale value="${param.locale}" scope="session"/>

doTag() 本体内でセッション コンテキストを取得するスマートな方法はありますか?

前もって感謝します。

4

2 に答える 2

1

JSTLは、役立つ可能性のあるJava APIも提供しますが、インスタンスを取得する方法が必要になるため、Tag(ではなく)インターフェースを実装する必要があります。拡張していると仮定して、次のことを試してください。SimpleTagPageContextTagSupport

import javax.servlet.jsp.jstl.fmt.LocaleSupport;

    public int doEndTag() throws JspException {
        //...
        String tableId = LocaleSupport.getLocalizedMessage(this.pageContext, "table.id", "i18n.messages");
        //...
        return EVAL_PAGE;
    }
于 2013-01-30T18:32:10.813 に答える