2012-04-03 2 views
1

RichFaces를 배우고 있습니다. .xhtml에 a4j : commandButton을 추가했습니다. 다음은 내 .xhtml 코드, 나는 그래서 내가 어떤 A4J 필터a4j : commandButton이 작동하지 않습니다. 클릭시 아무런 작업이 수행되지 않습니다.

그러나 A4J 부여하지 않은 richfaces 4를 사용하고

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:rich="http://richfaces.org/rich" 
xmlns:a4j="http://richfaces.org/a4j"> 
    <h:head> 
    </h:head> 

    <h:body> 
    <h:form> 
    <rich:panel> 
     <h:panelGrid column="2"> 
      <h:inputText value="#{echoBean.name}"/> 
      <h:outputText value="#{echoBean.name}" id="echoTxt" /> 
      <h:outputText value="Count" /> 
      <h:outputText id="countTxt" value="#{echoBean.count}" /> 
     </h:panelGrid> 
     <a4j:commandButton value="Send" actionListener="#{echoBean.incrementCount}" reRender="echoTxt, countTxt"/> 
    </rich:panel> 
    </h:form> 
    </h:body> 
</html> 

입니다있는 명령이 작동하지 않습니다. 클릭시 아무런 조치도 취하지 않습니다. 그리고 스택 추적에 오류가 없습니다.

내가 누락 된 항목이 있습니까?

감사

업데이트 : 조치하여 ActionListener를 교체 한

.

package org.droidaceapps.src; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.bean.SessionScoped; 
import javax.faces.event.ActionEvent; 

/** 
* @author yasodavenkat 
* 
*/ 
@ManagedBean(name="echoBean") 
@SessionScoped 
public class EchoBean { 

    private String name; 
    private int count; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getCount() { 
     return count; 
    } 

    public void setCount(int count) { 
     this.count = count; 
    } 

    public EchoBean() { 
    } 

    public void incrementCount(ActionEvent e){ 
     count = name.length(); 
    } 
} 

*/

이제 온 클릭은 다음과 같은 예외를 throw 버튼의

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:604) 
    at java.util.ArrayList.get(ArrayList.java:382) 
    at javax.faces.component.AttachedObjectListHolder.restoreState(AttachedObjectListHolder.java:165) 
    at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1560) 
    at com.sun.faces.application.view.StateManagementStrategyImpl$2.visit(StateManagementStrategyImpl.java:267) 
    at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1590) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIForm.visitTree(UIForm.java:344) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:254) 
    at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:188) 
    at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:453) 
    at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:148) 
    at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:303) 
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:192) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

내 관리 빈 코드는,

/** * 나는 관련이 있음을 이해 국가 관리 문제. 내 추측이 맞습니까? 나는 다른 것을 놓치고 있니?

감사합니다.

+0

서버 로그/firebug에 오류가 있습니까? – Daniel

+0

@Daniel - 서버 로그에 오류가 없습니다. 실제로 텍스트 필드의 지정된 문자열의 길이가 OutputText에 표시 될 것으로 예상됩니다. 그것은 정상 commandButton과 함께 일어나고 있습니다. 하지만 a4j : commandButton을 사용하면 전혀 작동하지 않습니다. – droidsites

답변

1

, 당신이 그것을 할 action를 사용해야을 작업.

<a4j:commandButton value="Send" action="#{echoBean.incrementCount}" 
    reRender="echoTxt, countTxt"/> 

플러스, 당신은 execute 속성 태그를 추가하여 보내는 데이터를 설정하는 것을 잊지 마세요. 기본적으로 모든 양식을 제출합니다. component documentation에서 자세한 정보를 찾을 수 있으며 online showcase을 참조 할 수 있습니다.

UPDATE : 그 그 오류를 던지는 이유

name 변수가 null, 그건. 그것은 당신이 사용하고 있기 때문입니다. 당신이 InputText]를의 값이 outputText 값 (사용자가 입력 한 텍스트)와 두 번째 (널)과 함께 최초로 echoBean.name는 여러분의 빈에 두 번 잘 살고되고이

<h:inputText value="#{echoBean.name}"/> 
<h:outputText value="#{echoBean.name}" id="echoTxt" /> 

을하고있는 때문입니다 . 이 동작을 원할 경우 내 게시물에 추가 한 쇼케이스 링크를 실제로 살펴보고 어떻게 수행해야하는지 분석해야합니다.

+0

답장을 보내 주셔서 감사합니다. 그냥 회신을 보면서 나는 actionListener 대신 액션을 추가하려고 시도했다. 이것은 click 이벤트를 가져 왔지만 예외를 던지고 있습니다. 당연히 나는 이것과 관련 있다고 생각하지 않는다. 그러나 당신은 이것에서 나를 도울지도 모른다. Managed Bean 및 오류 추적과 관련된 질문에 대한 내 업데이트를 참조하십시오. – droidsites

+0

@droidsites 답변을 업데이트했습니다. –

+0

열심히 묻는 것 .... 그 오류 뒤에있는 이유는 내가 h : commandButton을 사용했을 때 어떻게 작동했는지 생각하고 있었기 때문입니다. 그런 다음 h : commandButton을 사용할 때와 같이 자신에게 응답하여 상태 값을 사용할 수 있도록 전체 페이지를 새로 고칩니다. 하지만 a4j의 경우 : 주정부가 어떻게 업데이트됩니까? – droidsites

0

다음은 문제 해결 방법을 확인하거나 해결하기위한 몇 가지 단계입니다.

  • 이 확인 당신이 언급 콩 관리 (하지 여기 백업 콩)

    1. 시도 '시간'또는 't'태그이 때문에 프로젝트에 대한 작은 정보에 완전한 해결책이 아니다주의하고 실행 해보세요 여러분의 빈 범위는 문제가 해결되지 않으면 다음 백업 빈 함께 sessionscope

    에 넣어면-config.xml에 당신은 당신의 명령 단추에 대한 actionListener을 사용하고

  • +0

    빈의 범위는 여기서 문제가되지 않습니다. 왜냐하면 액션은 'ApplicationScope'을 가진 빈에서조차 발생할 수 있기 때문입니다. –

    관련 문제