簡體   English   中英

動態添加Primefaces組件

[英]Adding Primefaces components dynamically

我想動態添加Primefaces組件。 我正在使用與此類似的解決方案,前面已經討論過:

<h:form>
    <h:panelGrid columns="2">
        <p:dataGrid id="categoriesGrid" value="#{bean.categories}"
            var="categoryBean" rowIndexVar="rowIndex">
            <p:column>
                <p:selectOneMenu id="categorySelect" effect="drop"
                    value="#{categoryBean.selectedCategory}" >
                    <f:selectItems value="#{categoryBean.availableCategories}"
                        var="category" itemLabel="#{category.name}"
                        itemValue="#{category}" />
                </p:selectOneMenu>
            </p:column>
        </p:dataGrid>
        <p:commandButton actionListener="#{bean.addNewCategory}"
            value="Add category" update="categoriesGrid"/>
    </h:panelGrid>
</h:form>

但它有問題。 在點擊“添加類別”按鈕后,我得到了回復示例:

<?xml version='1.0' encoding='UTF-8'?>
<partial-response>
<error>
    <error-name>
        class javax.faces.component.UpdateModelException
    </error-name>
    <error-message>
        <![CDATA[/createTutorial.xhtml @85,65 value=
            "#{categoryBean.selectedCategory}":java.util.NoSuchElementException]]>
    </error-message>
</error>
</partial-response>

提前致謝

問題出在我的豆子上。 為了獲得所選項,我不得不實現javax.faces.Converter接口的自定義實現。 在我看來,為這樣一個簡單的問題做很多工作(這個轉換器必須能夠訪問數據源等)。 所以我做了一個小技巧:

public class CategoryBean{

    private list<Category> availableCategories;
    private Category selectedCategory;

    public Long getCSelectedCategory(){
        // Get selected category by it's id and set selectedCategory
    }

    public void setSelectedCategory(Long selectedCategory){
        return selectedCategory.getId();
    }

    // The remaining setters and getters
}

相應的頁面代碼現在看起來像:

<p:column>
    <p:selectOneMenu id="categorySelect" effect="drop"
        value="#{categoryBean.selectedCategory}" >
        <f:selectItems value="#{categoryBean.availableCategories}"
            var="category" itemLabel="#{category.name}"
            itemValue="#{category.id}" />
    </p:selectOneMenu>
</p:column>

請注意itemValue屬性和顯示的訪問方法。我遇到的錯誤是錯誤的getter返回類型。

最后 ,在我的情況下動態地添加新的組件Primefaces唯一的問題是返回選擇的值。 您可以實現轉換器或使用類似的技巧。

在你看來,這樣的技巧是一個很好的解決方案

暫無
暫無

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

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