Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 如何将具有相同密钥的多个参数提取到JSF托管bean中_Parameters_Jsf 2_Request - Fatal编程技术网

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());