Как получить несколько параметров с одним и тем же ключом в управляемый компонент JSF - PullRequest
4 голосов
/ 05 июля 2011

Допустим, у меня есть этот запрос:

myview.xhtml?a=1&b=par1&b=par2

В myview.xhtml

<f:metadata>
  <f:viewParam name="a" value="#{myBean.a}"/>
  <f:viewParam name="b" value="#{myBean.b}"/>
</f:metadata>

В MyBean

@ManagedProperty("#{param.a}")
String a;

@ManagedProperty("#{param.b}")
String b;

Я думал, что setB(String b) будет вызван дважды, поэтому я могу добавить элементы в List, но он был вызван только один раз, с первым значением (par1).

Я также пытался преобразовать b в a List<String> но JSF не оценивается как List.

Итак, мой вопрос заключается в том, как ввести несколько значений параметров одним и тем же ключом, , используя @ManagedProperty.(сейчас я получаю paramterValues вручную)

1 Ответ

5 голосов
/ 05 июля 2011

Ваш вопрос немного сбивает с толку. Вы используете <f:viewParam> и @ManagedProperty. Обычно вы используете один или другой .

С @ManagedProperty это довольно просто. Вам нужно #{paramValues.b} вместо #{param.b}. Это делается под прикрытием так же, как HttpServletRequest#getParameterValues(), который возвращает String[] со всеми значениями параметров для данного имени.

@ManagedProperty("#{paramValues.b}")
private String[] b;

С <f:viewParam> Я не вижу никаких путей. У меня сложилось впечатление, что это просто не поддерживается. Но у меня также сложилось впечатление, что вам это совсем не нужно.


Обновление : по совпадению я столкнулся со следующим комментарием в методе decode() при сканировании в источнике UIViewParameter (Мохарра 2.1.1, строка 218 и далее) и я вспомнил этот вопрос:

// QUESTION can we move forward and support an array? no different than UISelectMany; perhaps need to know
// if the value expression is single or multi-valued
// ANSWER: I'd rather not right now.
String paramValue = context.getExternalContext().getRequestParameterMap().get(getName());

Таким образом, это «по замыслу» просто не поддерживается на <f:viewParam>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...