- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现一个基本的 Struts 1 i18n Web 应用程序,预期输出 (multi-language.jsp
) 应与下面的屏幕截图类似:
附:我的项目仅提供英语和德语版本,属性文件分别命名为 Common.properties
和 Common_de.properties
。
但是,我的应用程序无法在项目中找到属性文件(位于 src/properties/$Common_CountryCode.properties$
下)。当我点击应用程序 URL 时,控制台会弹出一些警告:
Nov 15, 2018 4:45:20 PM org.apache.struts.util.PropertyMessageResources loadLocale
WARNING: Resource properties/Common_en_US.properties Not Found.
Nov 15, 2018 4:45:20 PM org.apache.struts.util.PropertyMessageResources loadLocale
WARNING: Resource properties/Common_en.properties Not Found.
但事实是我的项目中甚至没有这两个属性文件。再次,当我单击首选语言时,控制台会弹出一些信息(不确定是否重要),浏览器将显示 404--Not Found
:
Nov 15, 2018 4:50:00 PM org.apache.struts.chain.ComposableRequestProcessor init
INFO: Initializing composable request processor for module prefix ''
Nov 15, 2018 4:50:01 PM org.apache.struts.chain.commands.servlet.CreateAction createAction
INFO: Initialize action of type: action.Action
这是我的struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean
name="userForm"
type="form.Form"/>
</form-beans>
<action-mappings>
<action
path="/LoginPage"
type="org.apache.struts.actions.ForwardAction"
parameter="/WebRoot/multi-language.jsp"/>
<action
path="/Submit"
type="action.Action"
name="userForm"
validate="true"
input="/WebRoot/multi-language.jsp"
>
<forward name="success" path="/WebRoot/multi-language.jsp"/>
</action>
<action
path="/Locale"
type="action.Action"
name="userForm"
parameter="method"
validate="false"
>
<forward name="success" path="/WebRoot/multi-language.jsp"/>
</action>
</action-mappings>
<message-resources
parameter="properties.Common" />
</struts-config>
多语言.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>multi-language.jsp</title>
</head>
<body>
<h1><bean:message key="label.common.message" /></h1>
<html:messages id="err_name" property="common.username.err">
<div style="color:red">
<bean:write name="err_name" />
</div>
</html:messages>
<html:messages id="err_password" property="common.password.err">
<div style="color:red">
<bean:write name="err_password" />
</div>
</html:messages>
<br />
<br />
<html:link page="/Locale.do?method=english">English</html:link>
<html:link page="/Locale.do?method=german">German</html:link>
<html:form action="/Submit">
<br />
<bean:message key="label.common.username" /> : <html:text property="username" />
<br />
<br />
<bean:message key="label.common.password" /> : <html:text property="password" />
<br />
<br />
<html:submit><bean:message key="label.common.button.submit" /></html:submit>
</html:form>
</body>
</html>
Action.java
( Controller )
package action;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
public class Action extends DispatchAction {
public ActionForward german(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
throws Exception {
request.getSession().setAttribute(
Globals.LOCALE_KEY, Locale.GERMAN);
return mapping.findForward("success");
}
public ActionForward english(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
throws Exception {
request.getSession().setAttribute(
Globals.LOCALE_KEY, Locale.ENGLISH);
return mapping.findForward("success");
}
}
Form.java
( View )
package form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
public class Form extends ActionForm{
String username;
String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if( getUsername() == null || ("".equals(getUsername())))
{
errors.add("common.username.err",
new ActionMessage("error.common.username.required"));
}
if( getPassword() == null || ("".equals(getPassword())))
{
errors.add("common.password.err",
new ActionMessage("error.common.password.required"));
}
return errors;
}
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
// reset properties
username = "";
password = "";
}
}
如果这里的代码太多,请道歉,只是想让场景变得清晰。
最佳答案
struts-config.xml
中的配置应该是这样的
<message-resources parameter="Common" null="true" />
然后 Struts 1 (Java) 尝试解析 ResourceBundle Inheritance使用 Common_en_US
、Common_en
和 Common
来针对您的区域设置。最后,如果没有找到包,则会抛出MissingResourceException
。
负责加载资源的类org.apache.struts.util.PropertyMessageResources
取代了“.”。在
<message-resources parameter="properties.Common" />
使用“/”会导致警告找不到资源属性/Common_en.properties,因为“.properties”会自动添加,并且“properties/”会添加到路径中。
假设您的文件位于类路径上的某个位置,例如 WEB-INF/classes
,一旦您更正配置,Struts 应该能够在没有警告的情况下找到它们。
关于java - 为什么我的 Struts 1 I18N 找不到属性文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315764/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!