是否可以在JSTL自定义标记doTag()中获取页面上下文?

时间:2013-01-30 14:49:44

标签: web-applications jstl custom-tags

我只是一个初学者,正在开发我的第一个网络应用程序。我正在尝试支持多种语言,因此我在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>");

问题是 - 我找不到为此捆绑包设置Locale的可能性,而不会声明多余的标记属性。有点:

<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()体内获取会话上下文?

提前致谢。

1 个答案:

答案 0 :(得分:1)

JSTL还提供了一个可能有用的Java API,但是您需要实现Tag接口(而不是SimpleTag),因为您需要一种方法来获取{{ 1}}实例。假设您正在扩展PageContext,请尝试以下操作:

TagSupport