【问题标题】:How to pass method expression to the Facelets tagfile如何将方法表达式传递给 Facelets 标记文件
【发布时间】:2014-01-02 21:58:58
【问题描述】:

我为带有命令按钮的确认对话框创建了一个标记文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" 
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:aym="http://aym.com/facelets"
    xmlns:rich="http://richfaces.org/rich"
>
    <h:body>
        <ui:composition>    
            <p:growl id="messages" />

            <h:panelGrid columns="1" cellpadding="5">   
                <p:commandButton value="#{label}" onclick="#{pupupId}.show()" type="button" ajax="false"/>
            </h:panelGrid>

            <p:confirmDialog message="#{message}"
                showEffect="bounce" hideEffect="explode"
                header="İşlem Onay" severity="alert" widgetVar="#{pupupId}">
                <p:commandButton value="Evet" update="messages" oncomplete="#{pupupId}.hide()" ajax="false"
                    action="#{actionMethod}" />
                <p:commandButton value="Hayır" onclick="#{pupupId}.hide()" type="button" /> 
            </p:confirmDialog>
        </ui:composition>
    </h:body>
</html>

这是我的使用方法:

<aym:onayButon id="onay2" label="#{lbl.kaydet}" 
    actionMethod="#{userMB.addUser}" pupupId="onaylaPopup" 
    message="#{msg.onay_sonuc}"  />

我正在传递当我单击按钮时要调用的操作方法。但是,当我这样做时,我会得到一个PropertyNotFoundException

WARNING: #{actionMethod}: javax.el.PropertyNotFoundException: /WEB-INF/tags/com/components/onayButton.xhtml @29,33 action="#{actionMethod}": /pages/index.xhtml @33,48 actionMethod="#{userMB.addUser}": Property 'addUser' not found on type com.otv.managed.bean.UserManagedBean
javax.faces.FacesException: #{actionMethod}: javax.el.PropertyNotFoundException: /WEB-INF/tags/com/components/onayButton.xhtml @29,33 action="#{actionMethod}": /pages/index.xhtml @33,48 actionMethod="#{userMB.addUser}": Property 'addUser' not found on type com.otv.managed.bean.UserManagedBean
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)

当我像这样在标记文件中硬编码操作方法时,它可以正常工作:

<p:commandButton ... action="#{userMB.addUser}" />

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 嗨@EmreAltun,给定的答案可以帮助你吗?

标签: jsf-2 primefaces facelets tagfile methodexpression


【解决方案1】:

尝试将操作 bean 和操作方法作为两个单独的参数作为一种解决方法:

模板

<p:commandButton value="Evet" 
    update="messages" oncomplete="#{pupupId}.hide()" ajax="false"
    action="#{actionBean[actionMethod]}" />

打电话

<aym:onayButon id="onay2" label="#{lbl.kaydet}" 
    actionBean="#{userMB}" actionMethod="addUser" pupupId="onaylaPopup" 
    message="#{msg.onay_sonuc}"  />

在调用时,bean 需要放在大括号中,方法名只能作为字符串给出。另见Solution on a similar topic

也许有帮助...

【讨论】:

  • 感谢您的关注和关注,您为我提供的解决方案奏效了!
猜你喜欢
  • 2012-10-08
  • 2012-06-23
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多