p:column filterValue属性的PropertyNotFoundException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p:column filterValue属性的PropertyNotFoundException相关的知识,希望对你有一定的参考价值。

我们正在尝试将我们的应用程序从tomcat / websphere迁移到自由配置文件。另外我们正在升级myfaces-version,我们使用2.1,到myfaces-2.2。

为了保存表的当前状态(过滤),我们将过滤后的值存储在映射中,并在加载表时读取它(p:column的filterValue属性)。

最初加载表时,将使用正确的方法(在我们的例子中,它是DataModel中的getFilterValue)。但是,如果我们开始过滤列,则不再找到该方法,并发生以下异常:

javax.el.PropertyNotFoundException: Die Eigenschaft 'getFilterValue' wurde nicht im Typ package.LazyModel gefunden.
javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:245)
javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:222)
javax.el.BeanELResolver.property(BeanELResolver.java:332)
javax.el.BeanELResolver.getType(BeanELResolver.java:83)
javax.el.CompositeELResolver.getType(CompositeELResolver.java:99)
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getType(FacesCompositeELResolver.java:150)
org.apache.el.parser.AstValue.setValue(AstValue.java:199)
org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:257)
org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:64)
org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.setValue(ContextAwareTagValueExpression.java:153)
org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:746)
org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:787)
org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:213)
org.primefaces.component.api.UIData.visitTree(UIData.java:822)

桌子:

<p:dataTable id="table" var="group"
                value="#{bean.lazyModel}"
                selection="#{bean.selectedMulti}"
                rows="#{bean.lazyModel.rows}" paginator="true"
                currentPageReportTemplate="#{msg['data.table.pagereport']}"
                paginatorTemplate="#{msg['data.table.paginator']}"
                rowsPerPageTemplate="#{msg['data.table.rows']}"
                resizableColumns="true" rowKey="#{group.pkId}" lazy="true"
                filterDelay="1000" emptyMessage="#{msg['data.table.empty']}"
                style="font-size: 8pt;"
                tableStyle="font-size: 8pt; table-layout:auto;"
                first="#{bean.lazyModel.first_m}"> >

                <p:column headerText="Name"
                    sortBy="#{group.name}" filterBy="#{group.name}"
                    filterValue="#{bean.lazyModel.getFilterValue('name')}"
                    filterStyleClass="column_filter" styleClass="wrap">
                    <h:outputText value="#{group.name}" />
                </p:column>

                ...

懒人模型:

@Named
@Scope(value = "prototype")
public class LazyModel extends AbstractLazyModel<Brand> {

  private static final long serialVersionUID = 2247660292777600670L;

  /**
   * Konstruktor
   */
  public LazyModel() {
    super();
  }

 public Object getFilterValue(final String keyForColumn) {
    return this.filterManager.getFilterField(this.getKeyForPage(), keyForColumn);

  }

我认为这应该是最重要的事情。

所以,我不明白触发异常的这些版本之间发生了什么变化。

每一个帮助都会很棒。 TIA!

答案

我不知道为什么它之前有效(它不应该(正确)),但你目前得到的错误是预期的。 filterValue属性应绑定到具有读写访问权限的属性。您可以将每个列过滤器值绑定到单个属性,但使用Map<String,Object>作为过滤器值更方便。

Bean(你的懒惰模型):

private Map<String,Object> filterValues = new HashMap<>();
// ... add getter and setter for filterValues

Xhtml

filterValue="#{bean.lazyModel.filterValues['name']}"

以上是关于p:column filterValue属性的PropertyNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

Echarts富文本

Linux命令——pr

函数if if在布尔值上

数据库基础

如何使用 R 语言在基于多个二进制变量的数据框中创建新变量?

数据库基础操作