Java 无法从复合组件中找到匹配的导航案例

Java 无法从复合组件中找到匹配的导航案例,java,jsf,navigation,richfaces,composite-component,Java,Jsf,Navigation,Richfaces,Composite Component,我有一个复合组件按钮,动作来自属性 <comp:interface> <comp:attribute name="buttonId" required="false"/> <comp:attribute name="action" required="false" method-signature="java.lang.String action()"/> <comp:attribute name="alt"/> &

我有一个复合组件按钮,动作来自属性

<comp:interface>
    <comp:attribute name="buttonId" required="false"/>
    <comp:attribute name="action" required="false" method-signature="java.lang.String action()"/>
    <comp:attribute name="alt"/>
    <comp:attribute name="value" />
    <comp:attribute name="immediate"/>
</comp:interface>

<comp:implementation>
    <h:commandButton alt="#{cc.attrs.alt}" action="#{cc.attrs.action}"
                     value="#{cc.attrs.value}"  id="#{cc.attrs.buttonId}"
                     immediate="#{cc.attrs.immediate}"/>
</comp:implementation>
问题是,当我单击按钮时,操作来自#{cc.attrs.action},因此我得到以下错误

Unable to find matching navigation case with from-view-id '/pages/test.xhtml' for action '#{cc.attrs.action}' with outcome 'success'

如何解决此问题?

添加targets属性以将action属性重新定位到commandButton将解决此问题。因此,commandButton上不需要action属性

<comp:interface>
    <comp:attribute name="buttonId"/>
    <comp:attribute name="action" targets="#{cc.attrs.buttonId}" method-signature="java.lang.String action()"/>
    <comp:attribute name="alt"/>
    <comp:attribute name="value" />
    <comp:attribute name="immediate"/>
</comp:interface>

<comp:implementation>
    <h:commandButton alt="#{cc.attrs.alt}" 
                     value="#{cc.attrs.value}"  id="#{cc.attrs.buttonId}"
                     immediate="#{cc.attrs.immediate}"/>
</comp:implementation>

目标:这是一个必需的属性,用于指定要创建的目标 调用的组件客户端ID “方法签名”属性(如果存在)。不同的目标客户机 ID可以在目标列表中用空格(不是制表符空格)分隔,但如果 此属性不与此标记和属性一起使用 如果使用方法签名,则只有“name”属性的值是 目标或可以说“name”属性的唯一值是目标

您还可以使用下面链接中TargetAttribute属性文档中描述的方法。基本上,您将使
cc:attribute
的名称与commandButton id相同,然后使用
targetAttributeName=“action”
表示您正在重新定位commandButton操作属性


这里我不确定,但我认为值得一试:尝试将
action=“#{cc.attrs.action}”更改为
action=“#{bean[cc.attrs.action]}”
并添加属性:
在调用组件时:
按钮不能在内部处理吗?i、 例如,使用一个内部字符串,比如action
targets=“actualButtonId”
,然后使用
;而不是在组合外部管理ID?看起来更安全一点。。。还是我遗漏了什么?
Unable to find matching navigation case with from-view-id '/pages/test.xhtml' for action '#{cc.attrs.action}' with outcome 'success'
<comp:interface>
    <comp:attribute name="buttonId"/>
    <comp:attribute name="action" targets="#{cc.attrs.buttonId}" method-signature="java.lang.String action()"/>
    <comp:attribute name="alt"/>
    <comp:attribute name="value" />
    <comp:attribute name="immediate"/>
</comp:interface>

<comp:implementation>
    <h:commandButton alt="#{cc.attrs.alt}" 
                     value="#{cc.attrs.value}"  id="#{cc.attrs.buttonId}"
                     immediate="#{cc.attrs.immediate}"/>
</comp:implementation>