2013-11-24 2 views
1

Я построил простой составной компонент - более богатую командуLink. Я хочу, чтобы поддержать clientBehavior, но когда есть <a4j:ajax> прикрепленных к компоненту я иногда получаю исключение: ELException: Function 'rich:component' not found'rich: component' not found: a4j: ajax с составным компонентом

Оно приходит только тогда, когда я использую #{rich:component('...')} внутри любой атрибут <a4j:ajax>. Например oncomplete="#{rich:component('...')}.show()"

Редактировать: Я получаю ошибку сервера, а не ошибку JavaScript.

Составной компонент (упрощенно):

<composite:interface> 
    <composite:attribute name="style" /> 
    <composite:clientBehavior name="click" event="action" targets="commandLink" default="true"/> 
</composite:interface> 

<composite:implementation> 
    <h:commandLink id="commandLink" style="#{cc.attrs.style}"> 
     <!-- my custom component content --> 
    </h:commandLink> 
</composite:implementation> 

Проблематика использование этого компонента выглядит следующим образом:

<myLib:commandLink value="Custom CmdLink"> 
    <a4j:ajax render="@form" execute="@form" 
     oncomplete="#{rich:component('myEditPopup')}"/> 
</myLib:commandLink> 

Но следующий код работает как шарм:

<h:commandLink value="test"> 
    <a4j:ajax render="@form" execute="@form" 
     oncomplete="#{rich:component('myEditPopup')}.show()"/> 
</h:commandLink> 

Редактировать: Это тоже работает:

<a4j:ajax render="@form" execute="@form" 
    oncomplete="#{rich:component('myEditPopup')}.show()"> 
    <myLib:commandLink value="label"/> 
</a4j:ajax> 

ответ

1

Кажется, что ошибка в Mojarra (мы использовали версию 2.1.6), что EL потерял пространство имен «богатым». рабочий обходной путь был объявить пространство имен в a4j: АЯКС тег для каждого использования:

   <myLib:commandLink value="Show"> 
        <a4j:ajax render="@form" execute="@form" xmlns:rich="http://richfaces.org/rich" 
           oncomplete="#{rich:component('myEditPopup')}.show()"/> 
       </myLib:commandLink> 

После обновления Mojarra в 2.1.26 проблему не исчезнет и не нуждается для этого обходного пути.

0

Если вам не хватает { в вашем эш, вы получите сообщение об ошибке rich:component not found.

Для a4j:commandButton

<a4j:commandButton value="Show" oncomplete="#{rich:component('chargePointDetailPopup')}.show()"/> 

Для a4j: Аякса в commandLink

<h:commandLink value="Show"> 
    <a4j:ajax render="@form" execute="@form" oncomplete="#rich:component('chargePointDetailPopup')}.show()"/> 
</h:commandLink> 

Убедитесь, что rich:popupPanel

<rich:popupPanel id="chargePointDetailPopup"> 
...... 
</rich:popupPanel> 

Для более Reference

+0

Эй, спасибо за ваш ответ - я немного вырезал из своего кода - в исходном коде отсутствует «{» (теперь исправлено). Я получаю ошибку Server, а не ошибку JavaScript. – user2304686

Смежные вопросы