Отображение сообщения проверки распорок - PullRequest
4 голосов
/ 18 января 2012

Я хочу отобразить ошибки, обнаруженные в классе действия, я использую:

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. Он не заменяет строку 2.

Я знаю, что это может быть сделано путем жесткого кодирования значения, но есть ли другой способ?

Ответы [ 4 ]

2 голосов
/ 19 января 2012

Поскольку вы хотите получить значение двух ключей из файла свойств и поместить его в ключ глобальной ошибки, Я бы сказал, получить каждое значение отдельно, используя

String sValue1 = getResources(request).getMessage(locale, "key1");
String sValue2 = getResources(request).getMessage(locale, "key2");

и затем поместите его в вашу глобальную ошибку

errors.add(ActionErrors.GLOBAL_MESSAGE,sValue1+"<br/>"+sValue2);

Надеюсь, это поможет ....

0 голосов
/ 18 января 2012

В 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).

0 голосов
/ 18 января 2012

Допустим, у вас есть файл свойств, который определяет некоторые ключи для сообщений, например:

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. Это то место, где мои знания об этой проблеме заканчиваются, поэтому вам нужно провести некоторое исследование по этой части для себя.

0 голосов
/ 18 января 2012

Трудно точно сказать вам, что делать, так как 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);

Выше будет напечатано

'Кошки' - недопустимый ввод.

...