2010-12-08 3 views
3

동적으로부터 추가, 삭제할 수 있습니다 이메일 주소의 목록입니다 JSF 복합 구성 요소가 있습니다 사용JSF2 복합 cc.attrs 발현 제대로

<composite:interface shortDescription="Display party email addresses"> 
    <composite:attribute name="addressable" required="true"/> 
</composite:interface> 

<composite:implementation> 
    <h:panelGroup layout="block" id="emails"> 
     <h:dataTable id="emailList" value="#{cc.attrs.addressable.emailAddresses}" var="email" styleClass="data-list small-list" cellpadding="0" cellspacing="0"> 
      <h:column> 
       <f:facet name="header">Address</f:facet> 
       <h:inputText id="emailAddress" value="#{email.address}" size="30" maxlength="100" required="true" label="Email"/> 
      </h:column> 
      <h:column> 
       <f:facet name="header">Description</f:facet> 
       <h:inputText id="emailDescription" value="#{email.description}" size="20" maxlength="100"/> 
      </h:column>   
      <h:column> 
       <f:facet name="header"> 
        <h:panelGroup styleClass="right-align" layout="block"> 
         <h:commandLink id="addEmail" action="#{cc.attrs.addressable.addEmailAddress}" title="Add an email address"> 
          <f:ajax execute=":#{cc.clientId}:emails" render=":#{cc.clientId}:emails"/> 
          <h:graphicImage library="images" name="add.png" id="emailAddImg"/> 
         </h:commandLink> 
        </h:panelGroup> 
       </f:facet> 
       <h:commandLink id="deleteEmail" action="#{cc.attrs.addressable.remove(email)}" title="Remove the email from this row"> 
        <f:ajax execute=":#{cc.clientId}:emails" render=":#{cc.clientId}:emails"/> 
        <h:graphicImage library="images" name="delete.png" id="emailDeleteImg"/> 
       </h:commandLink> 
      </h:column>   
     </h:dataTable> 
    </h:panelGroup> 
</composite:implementation> 

이 구성 요소를 다음과 같이

ERROR [S 다음 'deleteEmail "액션을 호출

<edit:emailAddresses addressable="#{personAddressable}" id="emailAddresses"/> 

예외를 야기 TDERR] 원인 : javax.el.MethodNotFoundException : /resources/edit/emailAddresses.xhtml @ 34,130 action = "# {cc.attrs.addressable.remove (이메일)}": 메소드를 찾을 수 없음 : 아니오 - 끝점 [ jboss.j2ee : 항아리 = tephra.war 이름 = PersonAddressable, 서비스 = EJB3] 세션 3j011-mgweoj-ghfwhlvv -1- ghfy2e5j-e1.remove()는

personAddressable 작업이 변경되는 경우 그러나. 그것을 (전자 우편) 제거하십시오 작동한다! 이것은 간단한 매개 변수 대체와 같으며 어떤 차이도 없어야합니다. 매개 변수가없는 이메일 주소를 추가하는 작업은 정상적으로 작동합니다.

backing bean에 대한 코드를 게시하지 않을 것입니다. 그러나 참조 용으로는 CDI (stateful conversation scoped bean)입니다.

저는 el 2.2를 사용하는 JBoss AS6-M5를 사용하고 있습니다.

+0

JSF impl/version은 무엇입니까? – BalusC

+0

jar-versions.xml에 따른 Mojarra 2.0.2-FCS. 그래도 좋은 지적. 이것이 도움이되는지보기 위해 나는 가장 최신의 가장 위대한 것을 얻으려고 노력할지도 모른다. – Andrew

+0

실제로 Mojarra 2.0.3 및 MyFaces 2.0.1이있는 JBoss6-CR1로 업그레이드되었습니다. 이러한 구현 중 어느 것도 문제를 해결하지 못했습니다. jboss-el 구현이 M5와 CR1 (1.0_02.CR2)에서 모두 동일하기 때문에 이것은 거의 놀라운 일이 아닙니다. – Andrew

답변

4

Tomcat 7.0.5에서는 문제가 재현되지만 Glassfish 3.0.1에서는 문제가 재현 될 수 있습니다. 이것은 Tomcat의 EL 구현에 버그가 있음을 의미합니다. 그것에 관한 버그를보고했습니다 : Tomcat Bug 50449.

JBoss는 Tomcat 포크를 사용하고 있기 때문에 동일한 버그가 JBoss에서도 나타날 수 있습니다.

대신 f:setPropertyActionListener을 사용하여 일시적으로이 문제를 해결할 수 있습니다. 적어도 세터와 Addressable 콩에서 email 속성과 조합

<h:commandLink action="#{cc.attrs.addressable.remove}"> 
    <f:setPropertyActionListener target="#{cc.attrs.addressable.email}" value="#{email}" /> 

.

+0

좋은 sleuthing. 이를 조사해 주셔서 감사합니다. 아무것도 할 필요가 없지만 수정을 기다리거나 해결해야합니다. – Andrew

+0

당신을 진심으로 환영합니다. 해결 방법을 게시했습니다. – BalusC

+0

그들은 그것을 최종적으로 수정했습니다 : https://issues.apache.org/bugzilla/show_bug.cgi?id=52445 Tomcat 7.0.24에서 사용할 수 있습니다. 이 질문으로 인해 버그 보고서를 다시 게시했습니다. http://stackoverflow.com/questions/8795009/cannot-pass-arguments-to-a-method-through-el-javax-el-methodnotfoundexception – BalusC