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

Web applications 是否可以在JSTL自定义标记doTag()中获取页面上下文?,web-applications,jstl,custom-tags,Web Applications,Jstl,Custom Tags,我只是一个初学者,正在开发我的第一个web应用程序。我试图支持几种语言,因此在JSTL自定义标记逻辑的主体中使用基于包的消息。像这样: ResourceBundle rs = ResourceBundle.getBundle("i18n.messages"); JspWriter out = getJspContext().getOut(); try { out.print("<table><thead>"); out.print("<th&g

我只是一个初学者,正在开发我的第一个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>");
ResourceBundle rs=ResourceBundle.getBundle(“i18n.messages”);
JspWriter out=getJspContext().getOut();
试一试{
输出。打印(“”);
out.print(“+rs.getString(“table.id”)+”);
out.print(“+rs.getString(“table.name”)+”);
out.print(“+rs.getString(“table.entry”)+”);
out.print(“+rs.getString(“table.diagnosis”)+”);
out.print(“+rs.getString(“table.doctor”)+”);
out.print(“+rs.getString(“table.release”)+”);
输出。打印(“”);
问题是-我找不到任何可能在不声明多余标记属性的情况下为这个包设置区域设置。有点:

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

场所
真的
真的
java.lang.String
然后:

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

但它似乎不正确,总是传递相同的区域设置字符串(默认为我的浏览器???),与我在标题中使用的设置无关

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

在doTag()主体中是否有获取会话上下文的智能方法


提前感谢。

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

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;
    }

您可以使用SimpleTagSupport访问JSTL自定义标记实现中的请求、响应、会话和其他对象:

class MyCustomTag extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        final PageContext pageContext = (PageContext) getJspContext();
        final ServletRequest request = pageContext.getRequest();
        final ServletResponse response = pageContext.getResponse();
        final HttpSession session = pageContext.getSession();
    }
}