2013-07-22 5 views
0

저는 JSF를 처음 사용하고 include 및 param의 작동 방식을 이해하려고했지만 막혔습니다. 어떤 도움이라도 대단히 감사합니다.ui : param의 매개 변수가 전달되지 않았습니다.

2 개의 간단한 페이지 (테스트 용), Page1.xhtml 및 Page2.xhtml이 있습니다. Page1에 Page2를 포함하고 싶습니다. Page2를 직접 호출하면 올바르게 전달 된 매개 변수를 볼 수 있지만 Page1을 호출하면 Page2가 매개 변수없이 포함됩니다. 아래는 코드입니다.

페이지 1 :

<h:body> 
<h:form id="test"> 
<b>Page 1</b><br/> 
<ui:include src="Page2.xhtml"> 
    <ui:param name="id" value="123" /> 
</ui:include> 
<b>End of Page 1</b> 
</h:form> 

페이지 2 : PageTestBean

<h:head> 
<f:view contentType="text/html"></f:view> 
</h:head> 

<h:body> 
<h:form> 
    <h:outputLabel for="ID" value="ID on Page2: "/> 
    <h:outputText id="ID" value="#{pageTestBean.id}"/> 
</h:form> 
</h:body> 
</html> 

: @ManagedBean 이 공용 클래스 PageTestBean {

private Long id=new Long(11111); 

public void init() { 
    //doesn't do anything yet; 
} 

// Getters and Setters 

public long getId() { 
    return id; 
} 

public void setId(long id) { 
    this.id = id; 
} 

} 
을 @SessionScoped

매개 변수가 전달되지 않은 경우 기본값 인 "11111"이 아니라 Page1의 출력 ID로 "123"이 표시 될 것으로 예상됩니다. 그러나 항상 11111이 표시됩니다. 내 기대가 잘못 되었습니까? 모든

답변

1

먼저, 당신은 부적절하게 처리 같습니다 incuded 페이지는 전적으로 다음과 같은 <ui:composition> 구성해야합니다 참조

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    ...incuded page content... 
</ui:composition> 

훌륭한 점은 How to include another XHTML in XHTML using JSF 2.0 Facelets?에 BalusC의 답변입니다.

다음으로, 포함 된 매개 변수에 같이 포함 된 페이지에 #{paramName}를 통해 간단하게 액세스 할 수 있습니다 :

<h:outputText value="#{paramName}" /> 

매개 변수 이름은 귀하의 경우 id입니다.

악용 세션 범위와 중첩 된 HTML 양식과 같은 코드의 몇 가지 단점이 있지만 그 또 다른 질문입니다. 마지막으로, 뷰에서 관리 Bean을 처리하는 방법을 이해해야 만합니다.

+0

일단 yisa

+1

포함 된 페이지는 독립적으로 액세스 할 수 없습니다. 매개 변수는 포함 페이지에서 포함 된 페이지로 정보를 전달하는 데 사용됩니다. 이 페이지들은 더 큰 그림의 조각처럼 작용합니다. JSF에서 컴포지션에 대한 완전한 이해를 얻으려면 필자의 대답에서 링크를 다시 읽으십시오. – skuntsel

관련 문제