如何使用相同的密钥将多个参数提取到JSF托管bean中

blu*_*oot 4 parameters request jsf-2

假设我有这个要求:

myview.xhtml?a=1&b=par1&b=par2
Run Code Online (Sandbox Code Playgroud)

myview.xhtml

<f:metadata>
  <f:viewParam name="a" value="#{myBean.a}"/>
  <f:viewParam name="b" value="#{myBean.b}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

MyBean

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

@ManagedProperty("#{param.b}")
String b;
Run Code Online (Sandbox Code Playgroud)

我认为这setB(String b)将被调用两次,所以我可以将项添加到a List,但它只调用一次,第一个值(par1).

我也尝试将b转换为a,List<String>但JSF并没有将其评估为a List.

所以,我的问题是如何使用@ManagedProperty相同的键注入多个参数值.(现在我正在paramterValues手动)

Bal*_*usC 5

你的问题有点令人困惑.你正在使用<f:viewParam>@ManagedProperty.通常你使用其中一个.

随着@ManagedProperty这是相当容易的.你需要#{paramValues.b}而不是#{param.b}.这与在给定名称上HttpServletRequest#getParameterValues()返回String[]包含所有参数值的a 相同.

@ManagedProperty("#{paramValues.b}")
private String[] b;
Run Code Online (Sandbox Code Playgroud)

随着<f:viewParam>我看不出有任何的方式.我的印象是这根本不受支持.但我的印象是你根本不需要它.


更新:通过重合我在该decode()方法中遇到以下注释UIViewParameter(Mojarra 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());
Run Code Online (Sandbox Code Playgroud)

所以,它的"设计"根本不受支持<f:viewParam>.