如何在会话 java 中存储 ResourceBundle 对象?
How to store ResourceBundle object In session java?
我有一个用于本地化的标签库,其中包含 3 个标签和一个标签文件:
SetLocale - 将选定的区域设置设置为会话
SetBundle - 通过使用会话
获取的 Locale 将集合的包标记到会话
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>myshortname</short-name>
<uri>http://mycompany.com</uri>
<tag>
<name>setBundle</name>
<tag-class>com.example.FinalProjectPM.web.handlers.BundleHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>basename</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>LValueParam</name>
<tag-class>com.example.FinalProjectPM.web.handlers.LValueParamHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>params</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>message</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>checkParam</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>boolean</type>
</attribute>
</tag>
<tag>
<name>localeValue</name>
<tag-class>com.example.FinalProjectPM.web.handlers.LocalValueHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>key</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag-file>
<name>setLocale</name>
<path>/WEB-INF/tags/setLocale.tag</path>
</tag-file>
</taglib>
我有用于将 Locale 设置为 Session 的标记文件
<%@ tag import="java.util.Locale" %>
<%@ tag language="java" body-content="empty" pageEncoding="utf-8" %>
<%@ attribute name="name" required="true" rtexprvalue="true" type="java.lang.String" %>
<%
Locale locale = new Locale(name);
session.setAttribute("tagLocale",locale);
%>
setBundle 标签的标签处理程序是:
public class BundleHandler extends SimpleTagSupport {
private String basename;
public void setBasename(String basename) {
this.basename = basename;
}
@Override
public void doTag() {
PageContext pageContext = (PageContext)getJspContext();
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
HttpSession session = request.getSession();
Locale gotLocale = (Locale)session.getAttribute("tagLocale");
ResourceBundle bundle = ResourceBundle.getBundle(basename,gotLocale);
session.setAttribute("Bundle",bundle);
}
}
如何在 Session 中存储 ResourceBundle?它可以工作,但是 IDE 告诉我 ResourceBundle 没有实现 Serializable,所以我需要这样做,但是如何实现?
理论上可以将 ResourceBundle 中的所有键和值存储在可序列化对象中,但您不需要这样做。您可以只在会话中存储区域设置和 ResourceBundle 的名称。
Web 应用程序在其整个生命周期内具有相同的类路径,因此 ResourceBundle 将始终以该名称可用。
我有一个用于本地化的标签库,其中包含 3 个标签和一个标签文件:
SetLocale - 将选定的区域设置设置为会话
SetBundle - 通过使用会话
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>myshortname</short-name>
<uri>http://mycompany.com</uri>
<tag>
<name>setBundle</name>
<tag-class>com.example.FinalProjectPM.web.handlers.BundleHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>basename</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>LValueParam</name>
<tag-class>com.example.FinalProjectPM.web.handlers.LValueParamHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>params</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>message</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>checkParam</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>boolean</type>
</attribute>
</tag>
<tag>
<name>localeValue</name>
<tag-class>com.example.FinalProjectPM.web.handlers.LocalValueHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>key</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag-file>
<name>setLocale</name>
<path>/WEB-INF/tags/setLocale.tag</path>
</tag-file>
</taglib>
我有用于将 Locale 设置为 Session 的标记文件
<%@ tag import="java.util.Locale" %>
<%@ tag language="java" body-content="empty" pageEncoding="utf-8" %>
<%@ attribute name="name" required="true" rtexprvalue="true" type="java.lang.String" %>
<%
Locale locale = new Locale(name);
session.setAttribute("tagLocale",locale);
%>
setBundle 标签的标签处理程序是:
public class BundleHandler extends SimpleTagSupport {
private String basename;
public void setBasename(String basename) {
this.basename = basename;
}
@Override
public void doTag() {
PageContext pageContext = (PageContext)getJspContext();
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
HttpSession session = request.getSession();
Locale gotLocale = (Locale)session.getAttribute("tagLocale");
ResourceBundle bundle = ResourceBundle.getBundle(basename,gotLocale);
session.setAttribute("Bundle",bundle);
}
}
如何在 Session 中存储 ResourceBundle?它可以工作,但是 IDE 告诉我 ResourceBundle 没有实现 Serializable,所以我需要这样做,但是如何实现?
理论上可以将 ResourceBundle 中的所有键和值存储在可序列化对象中,但您不需要这样做。您可以只在会话中存储区域设置和 ResourceBundle 的名称。
Web 应用程序在其整个生命周期内具有相同的类路径,因此 ResourceBundle 将始终以该名称可用。