gpt4 book ai didi

jsf - f :viewParam with multiple values

转载 作者:行者123 更新时间:2023-12-04 14:01:05 25 4
gpt4 key购买 nike

我有一个<f:viewParam>驱动的搜索屏幕。我正在尝试将其实现为单个<f:viewParam>接受多个值。

我相信正确的网址看起来像

<url>?state=COMPLETE&state=PENDING

XHTML部分如下:
<f:metadata>
<f:viewParam name="state"
value="#{backingBean.state}"
converter="#{stateNameConverter}" />
</f:metadata>

我已经在backingBean上尝试了以下2种方法签名:
public void setState(State... state)

希望JSF实现能够为这些值构建一个数组并在后备bean上进行设置。 JSF实现失败,并显示错误消息指出它无法将枚举转换为枚举数组。
public void setState(State state)

以为JSF实现可能会在URL中找到转换后的值时对其进行设置。仅设置了第一个值。
stateNameConverterStringenum值之间转换。

JSF 2中是否可以为 <f:viewParam>设置多个值?

最佳答案

不,不幸的是,没有<f:viewParams>这样的标签。 Mojarra的 UIViewParameter#decode() 实现(这是<f:viewParam>标记后面的代码)中也有一条注释,它确认:

@Override
public void decode(FacesContext context) {
if (context == null) {
throw new NullPointerException();
}

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

// submitted value will stay as previous value (null on initial request) if a parameter is absent
if (paramValue != null) {
setSubmittedValue(paramValue);
}

rawValue = (String) getSubmittedValue();
setValid(true);

}

现在,最好的解决方法是自己从 ExternalContext#getRequestParameterValuesMap()@PostConstruct<f:viewAction>属性中的 @ManagedProperty("#{paramValues.state}")String[]中收集值。

您也可以创建一个自定义的 <my:viewParams>标记来实现这一点,但这并不简单。

关于jsf - f :viewParam with multiple values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7794149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com