Parameters 如何将具有相同密钥的多个参数提取到JSF托管bean中
假设我有这个请求:Parameters 如何将具有相同密钥的多个参数提取到JSF托管bean中,parameters,jsf-2,request,Parameters,Jsf 2,Request,假设我有这个请求: 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> 我原以为setB(字符串b)会被调用两次,所以我可以将项目添加到列表中,但它只被调
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>
我原以为setB(字符串b)
会被调用两次,所以我可以将项目添加到列表中,但它只被调用了一次,第一个值(par1
)
我还试图将b转换为列表
,但JSF并没有作为列表
进行评估
因此,我的问题是如何使用@ManagedProperty
使用同一个键注入多个参数值。(现在我正在手动获取参数值)您的问题有点让人困惑。您正在使用
和@ManagedProperty
使用@ManagedProperty
这非常简单。您需要{paramValues.b}
而不是{param.b}
。这与在给定名称上返回包含所有参数值的字符串[]
相同
@ManagedProperty("#{paramValues.b}")
private String[] b;
用
我看不出有什么办法。我的印象是,这根本不受支持。但我也觉得你根本不需要它
更新:通过Concurrende,我在(Mojarra 2.1.1,第218行等)的源代码中爬行时,在decode()
方法中遇到了以下注释,我回想起这个问题:
// 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());
因此,
上根本不支持“按设计”这一功能。确实,这里可能只需要@ManagedProperty
“#{paramValues}
非常有效,谢谢(+1)但是,当我将我的bean限定为@Named
时,我应该使用什么呢,因为@ManagedProperty
的javadoc说:如果这个注释出现在一个没有ManagedBean注释的类上,那么实现必须对这个注释不采取任何操作。?不知道。我没有仔细研究CDI。很可能这取决于由于我正在使用Spring连接我的@Named
bean,因此类似@Inject@Named(“#{param.a}”)
的东西将永远不会工作。无论如何,这不属于这个问题的范围。。。
// 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());