2011-09-29 7 views
1

로그인 한 사용자가 태그 본문 내에 내용을 렌더링하는 새 JSP 태그 (Struts 1.2.9/Java 5/Tomcat 5.5 웹 응용 프로그램에서)를 작성했습니다. 주어진 역할 중 하나를 가진다.사용자 정의 JSP 태그가 동적 본문 내용을 렌더링하지 않습니다.


<?xml version="1.0" encoding="UTF-8"?> 
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:tiles="http://jakarta.apache.org/struts/tags-tiles" 
    xmlns:initech-user="urn:jsptagdir:/WEB-INF/tags/initech-user/"> 
    <html:xhtml /> 

    <initech-user:userHasRole userRoles="Admin,TPS Manager,"> 
     abcde 
     <tiles:insert name="tiles.components.deletebutton"> 
      <tiles:put name="deleteClass" value="build"/> 
      <tiles:put name="deleteId" value="${sessionScope.buildForm.id}"/> 
     </tiles:insert> 
    </initech-user:userHasRole> 

</jsp:root> 
태그는 태그 내의 모든 "정상"내용 (html 태그를 렌더링한다는 의미에서, 부분적으로 작동

, 텍스트 : 사용자 정의 태그가 사용 된 파일의


<?xml version="1.0" encoding="UTF-8"?> 
<%@ attribute name="userRoles" rtexprvalue="false" required="true" description="Comma-separated list of user role names, against which the logged-in user's roles are tested." %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

<jsp:directive.tag description="Evaluates the nested body content if the logged-in user has one of the roles given in the userRoles attribute." /> 
<jsp:directive.tag body-content="tagdependent" /> 

<c:if test="${sessionScope.userData ne null}"> 
    <jsp:doBody var="bodyContent" scope="page"/> 
    <jsp:scriptlet> 
     String userRoles = (String) jspContext.getAttribute("userRoles"); 
     com.initech.core.db.model.UserData userData = (com.initech.core.db.model.UserData) session.getAttribute("userData"); 
     if(com.initech.web.struts.action.UserUtils.hasOneOfRolesInCommaSeparatedList(userData, userRoles)){ 
      String bodyContent = (String) jspContext.getAttribute("bodyContent"); 
      out.write(bodyContent); 
     } 
    </jsp:scriptlet> 
</c:if> 

예). 위의 예제에서 "abcde"텍스트는 JSP 페이지에 표시되지만 중첩 된 tiles 태그로 삽입 된 내용은 표시되지 않습니다. 명확히하기 위해, 다음과 같은 부분이 제대로 렌더링되지 않습니다 : 나는 HTML 소스를 볼 때


<tiles:insert name="tiles.components.deletebutton"> 
      <tiles:put name="deleteClass" value="build"/> 
      <tiles:put name="deleteId" value="${sessionScope.buildForm.id}"/> 
     </tiles:insert> 

, 나는 (즉, 마치 페이지에 기록 된 "있는 그대로"내용이 JSP 페이지에 직접 렌더링되는 것을 볼 수 그것은 정상적인 HTML 컨텐츠였습니다.) 물론, 타일 태그를 평가하고 출력의 태그를 내 태그 안에 쓰고 싶습니다. 이것은 분명히 타일 태그에만 적용되는 것이 아니라 다른 동적 콘텐츠에도 적용됩니다.

tiles tag-library가 삽입 한 내용도 렌더링되도록 사용자 정의 태그를 구현할 수 있습니까? followingly 태그 지시자 "몸 내용"을 변경하여 해결

답변

1

문제 :

<jsp:directive.tag body-content="scriptless" /> 
0

을 톰캣 6.x의 JSP 2.1에서 당신은 사용해야합니다

<%@tag body-content="scriptless" %> 
관련 문제