2011-10-11 5 views
0

지금까지 페이지를 표시하는 데 항상 JSP를 사용 해왔다. 때와 같은, 내가 배열 목록에있는 모든 항목 카테고리를로드하고이 같은 선택 상자에서 옵션으로 그들을 표시 "항목 추가"같은 페이지에 대한 사용자 요청 : 책에서JSF에서 데이터를 채우는 방법

<select name="category> 
    <% 
     ArrayList<Category> categories = (ArrayList<Category>) request.getAttribute("categories"); 
     for (Category c : data) { 
    %> 
    <option value="<%= c.getId() %>"><%= c.getName() %></option> 
    <% 
     } 
    %> 
</select> 

는 "자바 서버 2.0을 얼굴, The Complete Reference "에서 배운 내용은 다음과 같습니다."JSF는 마크 업 페이지에 Java 코드를 포함시키지 않아도 깨끗한 Model-View-Controller 분리를 시행합니다. " 그러므로 누군가가 JSF를 사용하여 위의 작업을 처리 할 수있는 방법을 보여줄 수 있다면 Java 코드를 사용할 수 없으므로 매우 감사하게 생각합니다.

안부,

제임스 트란

답변

0

Java 목록에 표시 할 데이터를 저장하고 해당 목록을 백업 빈의 특성으로 표시하십시오. 해당 JSF 태그를 사용하여 해당 특성을 표시하십시오.

+0

나는 처음 2 점을 할 수있다. 어떤 종류의 태그를 사용해야하는지 알려주시겠습니까? 감사! –

+0

힌트를 보내 주셔서 감사합니다! 나는 이미 그것을하는 방법을 알아 냈다. 그것은 여기에서있다 (http://www.roseindia.net/jsf/selectItems.shtml) –

+0

@JamesBoyZ : Roseindia.net는 일반적으로 ** 나쁜 연습 **을 가르치는 위치이다. 당신이 JSF를 처음 접했을 때이 리소스를 무시하십시오. – BalusC

1

빈을 만들고이를 예에 알리고 @Named이므로 JSF 스크립트에서 참조 할 수 있습니다. 그런 다음 해당 bean에 표시 할 데이터를 반환하는 메소드를 제공하고 해당 데이터가 예상되는 위치에서 JSF 스크립트의 해당 메소드를 호출합니다. 루프 구조.

+0

내가 JSF에 새로운 오전을 선언해야합니다 당신의 다른 개체의 값과 라벨을 필요한 경우. .xhtml 페이지에서 루프 구조를 수행하는 방법을 알려주시겠습니까? 현재 dataTable 및 outputText를 사용하여 출력을 인쇄하는 방법 만 알고있었습니다. 그러나, 내가 필요한 것을

2

JSF 2.0은 Facelets를 템플릿 방법으로 사용합니다. 간단히 말해서 몇 가지 추가 요소가있는 XHTML입니다.

기술적으로는 Facelets에서 메소드 호출을 수행 할 수 있지만 일반적으로 적절한 geter/setter 메소드로 JavaBean에 액세스하여 데이터 이동을 수행하는 것이 좋습니다. 코드의 다음 세그먼트와 같이이 작업을 수행 할 수 있습니다

사물의 콩 측면에서
<h:selectOneMenu value="#{backingBean.selectedCategory}"> 
    <f:selectItems value="#{backingBean.categoryList}"/> 
</h:selectOneMenu> 

, 당신은 (크게 실망입니다)에 직면-설정이나 장치 등을 사용하여 JSF에 빈을 노출 할 CDI 또는 Managed Bean 인프라 스트럭처. CDI 경로를 간다면 SEAM을 사용하는 것이 좋습니다. CDI에서 JSF 범위를 사용하고 JSF 범위에서 CDI 빈을 사용할 수 있도록 (현재 이상하게 다른 이질적인) Managed Bean 및 CDI 프레임 워크를 통합 할 것이므로 매우 좋습니다.

@ManagedBean(name="backingBean") 
@ViewScoped 
public class MyJavaBackingBean { 

    @ManagedProperty("#{param.categories}") 
    protected List<String> categoryList 

    public void setSelectedCategory(String value) { 
     this.selectedCategory = value; 
    } 
    public String getSelectedCategory() { 
     return this.property; 
    } 

    ... 

} 

또한 게터 (예를 들어 데이터베이스에서 categoryList를 당기는) 당신의 가치의 게으른 초기화를 할 수 있도록, 다양한 초기화 작업을 수행 할 다른 JSF 주석을 사용할 수 있습니다.

JSF 액션 (this는 faces-context.xml 파일에 코드화 됨)을 나타내는 String을 반환하는 액션 메소드를 코딩하여 반환 할 수 있습니다. Backing 빈의 단계 리스너는 페이지 렌더링, 유효성 검사 및 제출의 여러 단계에서 호출 할 수 있으므로 매우 정교하게 제어 할 수 있습니다.

categoryList 위의 예는 물론 기본 유형에 국한되지 않으며 f : selectItems >에는 선택 항목의 텍스트 버전을 작성하는 구문이 있으므로 각 항목을 표시 할 수있는 상당히 복잡한 표현식을 만들 수 있습니다. 항목을 친숙한 방식으로

+0

=) 매우 상세한 답변을 보내 주셔서 감사합니다. JSF에서 처음이기 때문에 모든 점을 완전히 이해할 수는 없지만 이러한 점을 염두에 두도록 노력하겠습니다. P. –

+0

그냥 내 2 센트 : 곧 CDI 공부. 기본적으로 Spring의 J2EE 표준화 버전이며 매우 강력합니다. CDI를 사용할 때 SEAM (http://seamframework.org/Seam3)을 사용하십시오. 그렇지 않으면 JSF와 잘 통합되지 않습니다. JSF를 사용하면 JSF를 사용하는 것이 상당히 즐거우 며 흥미로운 것들이 가능해진다 : http://stackoverflow.com/questions/6199458/how-to-create-a-modular-jsf-2-0-application – SplinterReality

0

JSF 2.0에서 선택된 항목 값을 저장하는 값을 가져 오는 h : selectOneMenu 태그를 포함 할 수 있습니다. f : selectItems의 값은이 객체의 SelectItem 객체와 선언 할 값 객체 및 표시 할 레이블의 대부분의 객체의 컬렉션이 될 수 있습니다.

<h:selectOneMenu value="#{backingBean.selectedvalue}"> 
    <f:selectItems value="#{backingBean.List}"/> </h:selectOneMenu> 

당신이

<h:selectOneMenu value="#{backingBean.selectedvalue}"> 
    <f:selectItems value="#{backingBean.ListCar}" var="car" itemLabel="#{car.model}" itemValue="#{car.modelId}"/> 
</h:selectOneMenu> 
관련 문제