2014-12-02 8 views
1

는의가 있다고 가정 해 봅시다 내가 가지고있는 다음과 같은 많은 곳에서 내 JSF 코드의 단순함을 오염 구성 :저장 및 PrimeFaces에서 재사용 태그 정의

이 가 이 볼 수있는 바와 같이

, 이것은 구 (9) 속성과 중첩 된

<p:calendar id="decisionDate" 
    effect="explode" 
    yearRange="2000:2100" 
    pattern="MM/dd/yyyy" 
    navigator="true" display="inline" 
    value="" 
    label="Decision Date" 
    maxlength="10" 
    size="20"> 
     <f:convertDateTime pattern="MM/dd/yyyy" /> 
</p:calendar> 
꼬리표. 이것은 눈으로 섭취하는 지루한 세부 사항입니다.

내가 CSS와 유사한 방법으로 PrimeFaces 태그를 재사용 할 수있는 방법이 있나요 : 위의 매개 변수를 뺀 ID 것들과 <px:myCalendar/> 같은 복잡한 태그 정의를 저장하는, 그럼에도 불구하고 사용의 각 인스턴스에 대해 설정해야 px 내 네임 스페이스가 될 것이고, 내가 호출해야 할 때마다, 나는 단지 <px:myCalendar id="uniqueCalID"/>이라고 말할 것입니다. 그리고 ... 붐 ... 모든 반복되는 혼란이 있습니까?

POST 응답 편집 : 체크 아웃 this tutorial

+0

downvote, 정말요? – amphibient

답변

1

당신은 복합 구성 요소를 정의 할 수 있습니다. 그것은 xhtml + jsf 네임 스페이스로 정의됩니다. 그러나 귀하의 경우에는 모든 컴포지트 구성 요소 사용에 대해 인스턴스화 된 자바 클래스 인 백업 구성 요소가 없습니다.

복합 구성 요소 인터페이스 내에서 동작을 다양하게하는 특성을 정의 할 수 있습니다. 그리고 구현시 필요한 일부 프라퍼티의 컴포넌트를 하드 코딩 된 속성과 함께 삽입 할 수 있고 일부는 복합 컴포넌트 호출에서 전달할 수 있습니다.

이 튜토리얼 고려 :

복합 구성 요소가 자원 https://docs.oracle.com/javaee/6/tutorial/doc/giqzr.html

예, 그래서 우리는 /resources 폴더 아래에 넣어. 하위 폴더 /resources/myCompositeComponents을 만들고 xhtml 파일 myCalendar.xhtml을 만듭니다. 그것은 우리의 복합 구성 요소가 될 것입니다. 기본적으로 추가 네임 스페이스 xmlns:cc="http://java.sun.com/jsf/composite"이있는 xhtml 파일입니다. 여기에 코드가 있습니다. 두 요소 (<cc:interface><cc:implementation>)를 확인할 수 있습니다. 그리고 <cc:attribute> 요소 안에있는 <cc:interface>은 복합 구성 요소의 입력입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<!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:f="http://xmlns.jcp.org/jsf/core" 
     xmlns:cc="http://java.sun.com/jsf/composite" 
     xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"> 
<cc:interface> 
    <cc:attribute name="label" default="Decision Date"/> 
</cc:interface> 
<cc:implementation> 
    <h2>#{cc.clientId}</h2> 
    <h:outputLabel 
      id="Label" 
      value="#{cc.attrs.label}"/> 
    <p:calendar id="Calendar" 
       effect="explode" 
       yearRange="2000:2100" 
       pattern="MM/dd/yyyy" 
       navigator="true" display="inline" 
       value="" 
       label="Label" 
       maxlength="10" 
       size="20"> 
     <f:convertDateTime pattern="MM/dd/yyyy" /> 
    </p:calendar> 
</cc:implementation> 
</html> 

그런 다음 사용해 보겠습니다. 새로운 컴포넌트를 선언하려면 사용 페이지에 추가 네임 스페이스 (xmlns:my="http://java.sun.com/jsf/composite/myCompositeComponents")를 추가합니다. 네임 스페이스 uri의 마지막 부분은 /resources 아래의 폴더에 해당하며 여기에는 복합 구성 요소가 있습니다. 당신이 좋아하는 어떤 접두사라도주세요. - 그는 "인터페이스"요소에 선언되어 매우 속성

<?xml version="1.0" encoding="UTF-8"?> 
<!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:h="http://java.sun.com/jsf/html" 
     xmlns:my="http://java.sun.com/jsf/composite/myCompositeComponents"> 

<h:head> 
    <title>Simple JSF Facelets page</title> 
</h:head> 

<h:body> 
    <my:myCalendar id="LetsUseIt" label="MyLabel"/> 
</h:body> 

</html> 

이 속성의 통지 "레이블을"유무 : 여기에 소스 코드입니다.

이것은 여러분의 상황에 도움이 되겠지만 상당히 기본적인 사용법입니다. 보다 복잡한 시나리오에는 형식화 된 특성 전달 및 구성 요소 인 Java 클래스 구현 (구성 요소를 사용할 때마다 인스턴스화)이 포함됩니다.

+0

감사합니다. 복합체에 모든 반복/상수 속성을 집중시키는 방법이 있지만 위의 예를 'id'로 예시 한 것처럼 마지막 구현에 변수를 넣는 방법이 있는지 알고 계십니까? – amphibient

+1

예, 있습니다. 내 PC에 도착하면 복합 컴포넌트를 사용하여 예제를 다시 작성합니다. 즉, cc : interface 섹션에서 사용 페이지의이 구성 요소에 대한 태그 이름으로 사용되는 구성 요소 유형을 선언합니다.또한 cc : attribute를 사용하여 일부 속성을 선언하고 attibute가 필수인지 여부에 관계없이 이름, 유형, 기본값을 설정합니다. 이 속성을 사용하면 페이지에 변수 매개 변수가 전달됩니다. Id 속성은 특별한 의미가 있습니다. # {cc.clientId} EL 표현식을 사용하여 인터페이스에 선언하면 안됩니다. 감사합니다. – iTollu

+0

. 또한 실제 작은 예제를 제공 할 수 있다면 그럴 것입니다. – amphibient