gpt4 book ai didi

java - 子类化 UISelectMany 以创建自定义 JSF 组件

转载 作者:行者123 更新时间:2023-12-01 15:36:31 25 4
gpt4 key购买 nike

我需要使用 JSF 2.0(不是复合组件)创建一个自定义组件,它类似于 SelectManyCheckbox,但具有不同的 UI。我尝试通过子类化 UISelectMany 并创建一个新的自定义渲染器来实现此目的。

我不明白的是,客户端的输入数据是如何通过Component传递到Bean中的。必须有一种方法可以从 POST 中收集 http 参数,将其放入 List 中,并在 Bean 中设置 List。

已编辑

我已经尝试过的与此类似:

public void decode(FacesContext context, UIComponent component) {
if ((context == null) || (component == null)) {
throw new NullPointerException();
}
MapComponent map = (MapComponent) component;
String key = getName(context, map);
String value = (String)context.getExternalContext().
getRequestParameterMap().get(key);
if (value != null)
map.setCurrent(value);
}
}

我可以在调试器中看到我的 http-params 已正确获取。我还可以看到,之后将调用我的自定义转换器。但这些值并没有到达 Bean。但我可以在日志中看到一个非特定的验证错误。在阅读了网上的一些教程后,我仍然不明白这是如何工作的。必须有一些粘合代码,它获取转换后的值并将其传递给 Bean 中的 setter。有人知道这是如何工作的吗?

谢谢一月

最佳答案

There must be a way to collect the http params from the POST, put it in a List and set the List in the Bean.

这通常在 decode() 中完成Renderer的方法类(class)。如果是Mojarra ,它是 com.sun.faces.renderkit.html_basic.MenuRenderer 类。只是download来源并查看其中是如何完成的。

基本上,您只需获取与组件客户端 ID 关联的请求参数值作为参数名称,然后将其设置为 UIInput#setSubmittedValue() 提交的值。 .

public void decode(FacesContext context, UIComponent component) {
((UIInput) component).setSubmittedValue(context.getExternalContext().getRequestParameterValuesMap().get(component.getClientId(context)));
}

(当然你需要事先做一些验证;再次检查原始源代码)

关于java - 子类化 UISelectMany 以创建自定义 JSF 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762184/

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