假设我已经有一个自定义类 CarString 之间的转换器。

有没有办法优雅地做到这一点

<f:viewParam name="mycars" value="#{mybean.cars}" converter="carConverter" />

mybean.carsSet<Car>List<Car> 而不仅仅是单个 Car 时工作,而不必在汽车列表和字符串列表之间编写自定义转换器?换句话说,JSF 是否有一些功能可以让我不必将 "[Audi,BMW,VW]" 解析为 ["Audi","BMW","VW"] 然后将它们一一转换(反之亦然)?

如果有类似的东西,我会喜欢的
<f:viewParam name="mycars" value="#{mybean.cars}" converter="carConverter" list="true" />

谢谢!

PS:我见过 this post about converters and selectManyMenu ,并且在我实际上使用它的另一个上下文中,一切正常 - selectManyMenu 处理一个一个的转换。但现在我需要 viewParam 将我的列表作为 URL 传递。

最佳答案

不,<f:viewParam> 不支持也不处理具有多个值的单个参数。这是 Mojarra 甚至在 its decode() method 中隐藏的评论中确认的情况:

213    public void decode(FacesContext context) {
214        if (context == null) {
215            throw new NullPointerException();
216        }
217
218        // QUESTION can we move forward and support an array? no different than UISelectMany; perhaps need to know
219        // if the value expression is single or multi-valued
220        // ANSWER: I'd rather not right now.
221        String paramValue = context.getExternalContext().getRequestParameterMap().get(getName());
222
223        // submitted value will stay as previous value (null on initial request) if a parameter is absent
224        if (paramValue != null) {
225            setSubmittedValue(paramValue);
226        }
227
228        rawValue = (String) getSubmittedValue();
229        setValid(true);
230
231    }

您对具有多个值的单个参数的最佳选择是使用 @ManagedProperty(在请求范围的 bean 中!)
@ManagedProperty("#{paramValues.car}")
private String[] cars;

或者从 ExternalContext 中的 @PostConstruct 手动收集它。

您可能想要发布新 <f:viewParams> 标签的功能/增强请求。

关于list - 有没有办法制作 f :viewparam handle lists of values?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17275130/

10-14 05:54