2013-10-14 2 views
3

commandButton이있는 복합 구성 요소를 만들고 있습니다. 그러나 그것은 효과가 없습니다.p에 대한 action 및 actionListener : 구성 요소의 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입니다. 하나의 옵션은 action 및 actionListener가 null이거나 정의 된 네 가지 변형을 만드는 것이지만 좋은 해결책 인 것 같지 않습니다.

+0

wk : commandButton이 양식 태그 안에 있습니까? p : commandButton에 다음 코드를 추가하십시오. ajax = "# {empty cc.attrs.actionListener? false : true}" – Yamada

+0

이 경우에는 ajax를 사용하고 싶지 않습니다. 버튼의 값처럼 말합니다. :) – WojciechKo

+0

그래서 ajax = "false"를 넣으십시오. 기본값은 true입니다. – Yamada

답변

4

null 동작 (수신기)을 명시 적으로 지정하는 대신 <cc:attribute targets>을 사용하십시오.

<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> 
관련 문제