2009-03-31 5 views
2

JSP를 사용하여 중첩 된 사용자 정의 태그를 작성하고 있습니다. 나는 이것을 할 수있는 두 가지 방법이 있다는 것을 이해한다 : 1) BodyTagSupport를 확장하는 태그 핸들러를 작성하고, 2) 태그 파일을 작성한다.JSP 태그 파일 : 중첩 확인

첫 번째 방법에서 코드는 추악합니다. 그리고 현재 스트럿츠 태그를 통합하는 방법을 찾지 못했습니다 .JspWriter를 사용하여 다음을 작성하면 컴파일 된 JSP에 의해 생성 된 의미있는 출력 대신 최종 HTML 출력에이 문자열이 표시됩니다.

<bean:write name="label"> 

따라서 두 번째 방법으로 돌아가서 태그 파일을 작성했습니다. 그런 다음 위의 문제가 해결됩니다. 그러나 부모 태그 클래스를 모르기 때문에 태그의 부모 태그를 가져 오는 데 문제가 있습니다. 난 내 자신의 태그 핸들러,

ParentTag parent = 
     (ParentTag)findAncestorWithClass(this, ParentTag.class); 
     if (parent == null) { 
     throw new JspTagException("this tag is outside of its parent tag"); 
     } 

을 썼다 있다면 다음을 수행 할 수 그러나 이후, 나는 태그 대신, 나는 꽤 부모가 무엇 클래스 모르는 파일을 사용했다.

이 문제를 어떻게 해결할 수 있습니까? 내가 충분히 바보 내가 JSP로 위의 자바 코드를 삽입하고, JSP 페이지에 "부모"를 전달하는 페이지에서 매개 변수를 설정할 수 잊혀지 것이 었습니다

답변

0

...

내가 아니다 물론이 질문을 닫아야 만한다면. 대답은 어리 석다. 수석 StackOverflow 사용자는 조언을 부탁드립니다.

1

글쎄, 태그 파일은 태그 처리기와 같은 "클래스"자체가 아닙니다. (분명히 그것은 모든 JSP 파일과 같지만 의미가 있습니다.)

태그 파일이있는 "중첩 된"태그를 사용해야 할 때 "잘 아는 이름"아래의 요청에 내 상태 데이터를 입력합니다. 효과적으로 두 태그 사이에 공유 "비밀".

는 하나 개의 태그 파일의 예를 들어 내가 할 수 있습니다

<% 
jspContext.setAttribute("_myWellKnownName", new java.util.LinkedHashMap(), PageContext.REQUEST_SCOPE); 
%> 

그런 다음, 나중에 태그 파일 :

<% 
    java.util.LinkedHashMap map = (java.util.LinkedHashMap) jspContext.findAttribute("_myWellKnownName"); 
%> 

그때 나는 모든 내가 원하는 변수 것을 조작 할 수 있습니다.

상위 태그에서 하위 태그의 코드를 실행하므로 내지도 (이 경우)가 채워진 후 그 시점에서해야 할 일은 무엇이든 할 수 있습니다.

기본 패턴은 하위 태그의 결과를 목록과 같은 것으로 수집 한 다음 부모가 모든 작업을 마친 후 실제 데이터를 페이지에 렌더링하는 것입니다.

부모님이 다른 부모와 중첩되어있는 태그 (즉, 하나의 태그가 다른 태그의 상태와 충돌하는 위치)가 필요하지 않은 것은 분명합니다. 일반적인 방법으로는이 방법에 문제가 될 수 있습니다. . 그래도 내 목적에는 여전히 효과적입니다.

0

this이 도움이 될 수 있습니다.

오전 1시 23분

에서

마이클 브리드 2010년 11월 9일 나는이 지금 거의 세,하지만 나 자신, 나는 내가 것이라고 생각 파일에 태그를 사용하여에 보고 할 일이로 알고 여기에 명시된 제한을 수정하십시오. . 실제로 어떤 JSP 용어 "fragments"를 사용하고 jsp : invoke 태그를 사용하여 여러 섹션을 삽입 할 수 있습니다. 방법은 다음과 같습니다.