簡體   English   中英

JSF 2:使用CommandButton創建自定義組件,並獲取ActionListener的屬性

[英]JSF 2: Create a custom component with CommandButton and get attribute to ActionListener

我是Stack Overflow的新手,對JSF 2.0和自定義組件有一個疑問(我也使用了primefaces 3,但我認為並不重要)。 下面是這種情況:我有一個AdvancedCriterion類型的嵌套數據對象,它包含AdvancedCriterionCriterion列表(通過接口criteria )。 這些標准用於創建一個復雜的過濾器對象,如下所示:

  • 高級標准:AND
    • 標准:PRODUCT等於“ABC”
    • 標准:USER以“A”開頭
    • AdvancedCriterion:OR
      • 標准:param1> 5
      • CRITERION:param2 <= 20

我在Java中創建了兩個新組件: AdvancedCriterion.javaSimpleCriterion.java來進行遞歸,因為第一次嘗試使用復合操作失敗了。 並且在復合中遞歸調用復合創建堆棧溢出:-(

直到知道我可以顯示靜態過濾器對象並且它看起來很好,但用戶應該添加或刪除標准。 所以我加入了一些按鈕(這里有一些主要內容)。 這里有一些代碼,我從第一個標准開始,它始終是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和getters以及類似的東西),總體而言這些不是解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM