2013-10-14 1 views
3

Я создаю составной компонент, где у меня есть commandButton. Но это не сработает.action и actionListener для p: commandButton в составном компоненте

Использование:

<wk:commandButton value="Non-Ajax actionListener" actionListener="#{ioBean.saveListener}" /> 

Код компонента: commandButton.xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:cc="http://java.sun.com/jsf/composite"> 
<cc:interface> 
    <cc:attribute name="value" /> 
    <cc:attribute name="action" method-signature="void action(javax.faces.event.ActionEvent)" default="null"/> 
    <cc:attribute name="actionListener" method-signature="void actionListener(javax.faces.event.ActionEvent)" default="null"/> 
    <cc:attribute name="styleClass" default="button" /> 
</cc:interface> 
    <cc:implementation> 
      <p:commandButton 
          value="#{cc.attrs.value}" 
          action="#{cc.attrs.action}" 
          actionListener="#{cc.attrs.actionListener}" 
          styleClass="#{styleClass}"> 
       <cc:insertChildren /> 
      </p:commandButton> 
    </cc:implementation> 
</html> 

И это журнал:

0000006c FaceletViewDe E Inner component action not found when retargetMethodExpressions 
0000006c FaceletViewDe E Inner component actionListener not found when retargetMethodExpressions 
0000006c srt   W com.ibm.ws.webcontainer.srt.SRTServletResponse setIntHeader SRVE8094W: Ostrzeżenie: nie można ustawić nagłówka. Odpowiedź została już zatwierdzona. 

Я думаю, что проблема со значением по умолчанию для действий и ActionListener. Но согласно документации PrimeFaces значение по умолчанию для action и actionListener равно null. Один из вариантов состоит в том, чтобы сделать четыре разных варианта, в которых действие и actionListener равны нулю или определены, но это не кажется хорошим решением.

+0

Является ли ваш wk: commandButton внутри тега формы? Добавьте следующий код в p: commandButton: ajax = "# {empty cc.attrs.actionListener? False: true}" – Yamada

+0

Я не хочу использовать ajax в этом случае. Как и значение в кнопке. :) – WojciechKo

+0

Итак, поставьте ajax = "false". Значение по умолчанию верно. – Yamada

ответ

4

Используйте <cc:attribute targets> вместо явного указания действия null (слушателя).

<cc:interface> 
    <cc:attribute name="value" /> 
    <cc:attribute name="action" targets="buttonId" /> 
    <cc:attribute name="actionListener" targets="buttonId" /> 
</cc:interface> 
<cc:implementation> 
    <p:commandButton id="buttonId" value="#{cc.attrs.value}" /> 
</cc:implementation> 

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

  • Нет связанных вопросов^_^