gpt4 book ai didi

java - 动态添加 Primefaces 组件

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:22 26 4
gpt4 key购买 nike

我想动态添加 Primefaces 组件。我正在使用类似于 this one 的解决方案, 之前在那里讨论过:

<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>

提前致谢

最佳答案

问题出在我的 bean 上。为了获得选定的项目,我必须实现 javax.faces.Converter 接口(interface)的自定义实现。在我看来,要解决这样一个简单的问题需要做很多工作(这个转换器必须能够访问数据源等等)。所以我做了一个小把戏:

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 组件的唯一问题是返回选定值。您可以实现转换器或使用类似的技巧。

您认为这样的技巧是一个好的解决方案吗?

关于java - 动态添加 Primefaces 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224584/

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