我想显示在动作类中检测到的错误,我使用:
errors.add(ActionErrors.GLOBAL_MESSAGE,
new ActionMessage("some_string_in_properties_file"));`
它工作正常。但是,我写了一些通用错误消息,我想重用它们,所以我试图这样做:
errors.add(ActionErrors.GLOBAL_MESSAGE,
new ActionMessage("string1_in_properties_file", "string2_in_properties_file"));
其中string1 = <li>{0} is required.</li>
。
然后显示string2 is required
。它没有用它的值替换string2。
我甚至尝试过
errors.add(ActionErrors.GLOBAL_MESSAGE,
new ActionMessage("string1_in_properties_file",
new ActionMessage("string2_in_properties_file")));
然后显示string2[] is required
。它不会取代string2。
我知道可以通过对值进行硬编码来完成,但还有其他方法吗?
答案 0 :(得分:2)
由于您想从Property文件中获取两个键的值,并将其放在全局错误键中, 我会说,使用
分别检索每个值String sValue1 = getResources(request).getMessage(locale, "key1");
String sValue2 = getResources(request).getMessage(locale, "key2");
然后将其置于您的全局错误
中errors.add(ActionErrors.GLOBAL_MESSAGE,sValue1+"<br/>"+sValue2);
希望它有所帮助....
答案 1 :(得分:0)
很难告诉你到底要做什么,因为O不知道errors
和ActionMessage
背后的代码。但是,您可以使用String.format
。您的代码看起来像这样
public class ActionErrors {
public static final String INVALID_INPUT "'%s' is not valid input.";
...
}
和
String input = "Cats";
String message = String.format(ActionErrors.INVALID_INPUT, input);
System.out.println(message);
以上将打印
'猫'无效输入。
答案 2 :(得分:0)
在Struts ActionMessage中,您可以为属性文件中指定的参数{0}
,{1}
,{2}
,{3}
指定值,如下所示:
errors.add(ActionErrors.GLOBAL_MESSAGE,
new ActionMessage("some_string_in_properties_file", "value1"));
可替换地:
errors.add(ActionErrors.GLOBAL_MESSAGE,
new ActionMessage("some_string_in_properties_file", "value1", "value2", "value3"));
value1
.. value3
可以是任何类型(因为Struts期望Object
)。
所以你的财产:
string1 = <li>{0} is required.</li>
将被替换为:
<li>value1 is required.</li>
(如果您将密钥指定为string1
)。
答案 3 :(得分:0)
假设您有一个属性文件,用于定义消息的某些键,如下所示:
string1: <li>{0} is required.</li>
string2: Username
ActionMessage类有许多构造函数,它们使用不同数量的参数。第一个是表示引用消息的键的字符串 - 在您的情况下,键是string1
,对应于消息<li>{0} is required.</li>
; {0}
是一些动态内容的占位符。
其余可能的参数是表示要替换这些占位符的实际值的对象。如果您执行new ActionMessage("string1", "string2")
,则传递的是字面值string2
,最终会得到<li>string2 is required.</li>
的输出。
您需要做的是使用方法调用替换"string2"
,该方法调用将获得与键string2
对应的值。这是我对这个问题的了解很快的地方,所以你需要自己做一些这方面的研究。