2013-12-18 4 views
0

작동하지 않습니다 렌더링 :JSF 다음 코드는 양식을 다시 쓰게하지 않습니다

XHTML :

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich" 
    template="/WEB-INF/templates/default.xhtml"> 
    <ui:define name="content"> 
     <h:form id="form"> 
      <rich:panel header="My Header"> 
       <h2> 
        <h:outputLabel value="#{tournamentBean.mode}" /> 
       </h2> 
       <a4j:commandButton value="Toggle" 
        action="#{tournamentBean.toggleMode()}" render="form" /> 
      </rich:panel> 
     </h:form> 
    </ui:define> 
</ui:composition> 

콩 : 나는 때문에 JSF 2.2 제이보스 8.0을 사용하고

import java.io.Serializable; 
import javax.faces.view.ViewScoped; 
import javax.inject.Named; 

@SuppressWarnings("serial") 
@Named("tournamentBean") 
@ViewScoped 
public class TournamentBean implements Serializable { 

    private String mode = "A"; 

    public String getMode() { 
    return mode; 
    } 

    public void toggleMode() { 
    if (this.mode.equals("A")) 
     this.mode = "B"; 
    else 
     this.mode = "A"; 
    } 
} 

. 메서드 toggleMode는 버튼을 클릭 할 때마다 호출됩니다. IE 11에서는 폼을 다시 렌더링하지 않습니다. Chrome에서는 두 번 작동하지만 더 이상 작동하지 않습니다.

무엇이 누락 되었습니까?

+1

RichFaces 만 가지고도 컴포넌트를 찾기 위해'UIComponent # findComponent()'메소드를 사용하기 때문에'render = "form"이 효과적 일 것입니다 만, 그것은 비효율적이며'render = "@ form" 현재 양식을 다시 렌더링하는 데 사용됩니다. – skuntsel

+0

"/WEB-INF/templates/default.xhtml"을 표시하십시오. 주위에 추가 h : form이 포함될 수 있습니까? – Andrey

+0

팁 주셔서 감사합니다. 'render = "@ from" '도움이되지 않았습니다. 그리고 default.xhtml은 매우 간단합니다. 양식이나 특별한 것은 없습니다. – Dave

답변

-1

@Named은 CDI 주석이며, @ViewScoped은 JSF에서 가져온 것입니다. 그래서 당신은 CDI와 JSF를 모두 bean을 관리하려고 시도합니다, 그래서 이것은 작동하지 않을 것입니다. 결과 bean 범위는 전혀 작동하지 않는다면 싱글 톤이 될 수 있습니다.

@ViewScoped을 예를 들어 @javax.enterprise.context.RequestScoped으로 바꾸고 코드를 실행 해보십시오. 뷰 범위를 사용해야하는 경우 CDI 구현 또는 conversationscope을 둘러보십시오. CDI가 직접 viewscope을 지원하지 않더라도 어떻게 든 완료 될 수 있습니다.

또는 JSF와 @ManagedBeans으로 마이 그 레이션하지만, 그것들은 희생당하는 경우가 있습니다.

+0

OP가 사용한 ViewScoped 선언에 문제가 없어야합니다. javax.faces.bean (old) 및 javax.faces.view (new & CDI compliant)에 속한 두 개의 ViewScoped 주석이 있습니다. –

+1

우선,'@ ViewScoped'는 JSF가 @ManagedBean과 함께있을 때만 JSF에서 작동합니다 (JSF 스코프는 CDI 주석과 함께 사용될 수 있습니다). 그것으로부터 Appart, Omnifaces 자신의 ['@ ViewScoped] (http://wiki.omnifaces.googlecode.com/hg/javadoc/org/omnifaces/cdi/ViewScoped.html) 주석은 CDI (그는 JSF 2.2를 사용하기 때문에 OP의 경우에는 필요하지 않습니다.) 마지막 문장에서는 JSF 관리 빈에 대해 더 이상 사용되지 않을 예정인 빈에 대해 실제로 확인하는 링크가 누락되었습니다. 쓸데없는 대답 IMHO : -1. –