假设我已经有一个自定义类 Car
和 String
之间的转换器。
有没有办法优雅地做到这一点
<f:viewParam name="mycars" value="#{mybean.cars}" converter="carConverter" />
当
mybean.cars
是 Set<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/