当前位置: 首页 > 知识库问答 >
问题:

如果在模板中,复合方法不解析参数

俞子实
2023-03-14

这有点像这个问题https://issues.jboss.org/browse/RF-11469我有一个包含组合的模板,定义如下:

<h:form id="transfer_list">
        <ccs:criteriaPanel header="Critère de recherche"
                           filterAction="#{controller.filter()}">
                <form:criteriaForm bean="#{controller.transferCriteria}"
                                   rendered="#{! empty controller.transferSearchForm}"
                                   mode="UPDATE"
                                   controller="#{controller}" />

        </ccs:criteriaPanel>
</h:form>

控制器是通过模板子级中的ui:param定义的。

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    template="/pages/transfer/transferList.xhtml">

    <ui:param name="controller" value="#{transferListOpenController}" />
</ui:composition>

以下是复合impl(标准面板):

<cc:interface>
    <cc:attribute name="header" default="#{i18n['HEADER_SEARCH_CRITERIA']}" />
    <cc:attribute name="filterAction" method-signature="java.lang.Object filter()" />
    <cc:attribute name="update" default="@(.ui-datatable)" />
</cc:interface>

<cc:implementation>
    <div id="#{cc.clientId}">
        <p:panel header="#{cc.attrs.header}" toggleable="true">
            <cc:insertChildren />

            <f:facet name="footer">
                <p:commandButton id="search_btn"
                                 value="#{i18n['BUTTON_FILTER']}" 
                                 action="#{cc.attrs.filterAction}"
                                 icon="ui-icon-search"
                                 update="#{cc.attrs.update}" />

               <p:commandButton value="#{i18n['BUTTON_CLEAR_FILTER']}"
                                action="#{cc.attrs.filterAction}" 
                                process="@this" 
                                immediate="true"
                                update="#{cc.attrs.update}">
                     <p:ajax update="@form" resetValues="true" /> 
                </p:commandButton>
            </f:facet>

            <p:defaultCommand target="search_btn" />
        </p:panel>
    </div>
</cc:implementation>

点击按钮“filterAction”结果如下:

javax.faces.FacesException:#{cc.attrs.filterAction}:javax.el.属性NotFoundException:目标不可达,标识符[控制器]在com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)org.primefaces.application.DialogActionListener.processAction(DialogActionListener.java:45)javax.faces.component.UICommand.broadcast(UICommand.java:315)解析为空

我使用Tomcat 8.5和Mojarra 2.2.13。如果我不把整个东西放在一个复合组件中,它就可以工作(标准面板)

使现代化

此处提供的样本:https://github.com/Rapster/primefaces-test/tree/issue-sof-45834296

与MyFaces 2.2.11和Mojarra 2.2.8-23和2.3.2配合良好(我不知道升级到2.3会有多大影响...)从我在这里读到的https://stackoverflow.com/a/42656386/4605161,Mojarra 2.2.8是针对WebLogic的,但似乎我需要这个(我在Tomcat上运行)

变通方法

写这篇文章让它发挥作用(但这是一个变通方法,我宁愿使用模板):

<ui:composition xmlns="http://www.w3.org/1999/xhtml">

    <ui:param name="controller" value="#{testView}" />

    <ui:decorate template="/template.xhtml">
     </ui:decorate>
</ui:composition>

有趣的是,如果我在ui:decoration中放入ui:param,我最终也会遇到同样的异常

共有1个答案

公冶同
2023-03-14

应在2.2.15中修复,请参阅github。com/javaserverfaces/mojarra/issues/4271

 类似资料:
  • 如何在一个语句中包含多个案例?我习惯于Vue或Angular 1带有、和,但Angular 4似乎只有()和()条件。 根据文件,我只能做: 但我想有多种条件(比如): 但我最终不得不使用,这感觉像是黑客攻击: 或者,我在Angular 1和Vue中使用的很多语法在Angular 4中似乎都不受支持,那么,用这样的条件构造代码的推荐方法是什么呢?

  • 4 钩子方法的使用        模板方法模式中,在父类中提供了一个定义算法框架的模板方法,还提供了一系列抽象方法、具体方法和钩子方法,其中钩子方法的引入使得子类可以控制父类的行为。最简单的钩子方法就是空方法,代码如下: public virtual void Display() { }       当然也可以在钩子方法中定义一个默认的实现,如果子类不覆盖钩子方法,则执行父类的默认实现代码。

  • 3 模板方法模式应用实例 下面通过一个应用实例来进一步学习和理解模板方法模式。         1. 实例说明 某软件公司欲为某银行的业务支撑系统开发一个利息计算模块,利息计算流程如下: (1) 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示; (2) 如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期账户和定期账户具有不同的利息计算公式); (3)

  • 1. 模板方法模式概述  在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是:点单 --> 吃东西 --> 买单。在这三个步骤中,点单和买单大同小异,最大的区别在于第二步——吃什么?吃面条和吃满汉全席可大不相同,如图1所示: 图1 请客吃饭示意图         在软件开发中,有时也会遇到类似的情况,某个方法的实

  • 我试图理解方法引用在java中是如何工作的。乍一看,这很简单。但当涉及到这些事情时: Foo类中有一个方法: 在另一个类Bar中有这样一个方法: 并使用方法参考: 它符合并工作,但我不明白它如何匹配这个: 到BiFunction方法: ???

  • 我需要在angularjs模板中使用else if。语法是什么?例如,在c语言中,我将编写如下代码: 我的代码: