java - JSF 2 : Create a custom component with CommandButton and get attribute to ActionListener

标签 java jsf recursion custom-component

我是 Stack Overflow 的新手,对 JSF 2.0 和自定义组件有疑问(我也使用 primefaces 3,但我认为没那么重要)。情况如下:我有一个 AdvancedCriterion 类型的嵌套数据对象,其中包含 AdvancedCriterionCriterion 的列表(通过接口(interface) 标准)。这些标准用于创建像这样的复杂过滤器对象:

  • 高级标准:AND
    • 标准:PRODUCT 等于“ABC”
    • 标准:USER 以“A”开头
    • 高级标准:或
      • 标准:参数 1 > 5
      • 标准:param2 <= 20

我在 Java 中创建了两个新组件:AdvancedCriterion.javaSimpleCriterion.java 来执行递归,因为第一次尝试使用组合失败。复合中复合的递归调用会导致堆栈溢出:-(

直到知道我可以显示一个静态过滤器对象并且它看起来不错,但用户应该添加或删除标准。所以我添加了一些按钮(这里加入了 primefaces)。这里有一些代码,我从第一个标准开始,它始终是 AdvancedCriterion

<myTag:advancedCriteriaComponent criteria="#{manageFiltersBean.filterBuilder.criteria}" />

我创建知道 Button 并想将父对象提供给 ActionListener:

CommandButton addButton = new CommandButton();
addButton.setId("btnAdd" + UUID.randomUUID());
addButton.setAjax(true);
addButton.setValue(" + ");
addButton.addActionListener(new CriteriaActionListener());
addButton.getAttributes().put("criteria", this.currentCriteria);

好吧,CriteriaActionListener 来了:

@Override
    public void processAction(ActionEvent event) throws AbortProcessingException {
        AdvancedCriteria criteria = (AdvancedCriteria) event.getComponent().getAttributes().get("criteria");
        criteria.addCriteria(new Criterion());
        System.out.println("number of children: " + criteria.getChildren().size());

    }

在组件中,currentCriteria 是众所周知的,我可以看到他的子元素。在 CriteriaActionListener 中,对象是空的(它具有正确的类型,但看起来像这种类型的新初始化对象)现在的问题:我如何获得 currentCriteria 对象进入 CriteriaActionListener?

我在ActionListener中尝试了一个属性并从组件中设置它,然后整个对象为NULL。我虽然试图制作一个 ELExpression 并将其正确地添加到 bean (#{manageFiltersBean.addCriterion(criteria}),但对象为 NULL。我没有更多的想法,不幸的是我对 JSF 很陌生(大约几周)。

也许是关于按钮的 id?它们是随机的,因为按钮的数量是动态的。我读到,每个按钮都必须有一个唯一的 ID 才能正常工作。还是与属性/参数有关?

谢谢你的帮助,

菲利克斯

最佳答案

这个问题解决了,还有一些出现。好吧,就像上面评论的那样,问题更像是“AdvancedCriteria”对象的实现问题。与“CommandButton”没有任何联系或提示,只是一个错误命名的 getter。

可能添加的行 implements Serialiable 有帮助,但我不完全知道,因为我尝试了很多东西(保存和恢复状态,枚举 propKeys 与 setter 和 getter 以及类似的东西) ,总的来说,这些都不是解决方案。

关于java - JSF 2 : Create a custom component with CommandButton and get attribute to ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837681/

相关文章:

java - 如何在Java中将group-by对象列表转换为html无序列表?

java - 如何在运行时获取weblogic托管服务器监听端口?

forms - 使用 JSF 的动态页面

css - p :selectOneMenu with relative width stretches out when resizing browser

java - JSF (PrimeFaces) 页面不适用于单一表单

java - 使用 Java 8 实现递归 lambda 函数

javascript - 为什么在此代码中使用 “n--” 运算符会引发错误?

JAVA:创建菜单循环

python - 这个递归二进制代码函数是如何工作的?

java - 如何从hadoop缓存中存在的文本文件访问文本