학부공부/웹시스템설계및개발

태그 파일에서 몸체 내용 처리

IT grow. 2018. 10. 13. 00:01
반응형

몸체 내용 처리


è  태그파일로 구현된 태그에 몸체를 전달하는 방법

형태 : <tf:someTagFile att =”속성값”>

         여기에 몸체 내용 입력

        </tf:someTagFile>

è  <jsp:body>태그를 이용해서 몸체 내용을 전달

 

 

태그 파일이 <jsp:attribute> 태그를 이용해서 속성값을 전달받을 경우는 <jsp:body>를 사용해서 몸체 내용을 전달한다

 

형태

 

<tf:someTagFile attrl =”속성값”>

<jsp:attribute name=”arr2”>value</jsp:attribute>

<jsp:body>

여기에 몸체 내용 입력

    </jsp:body>

</tf:someTagFile>

 

 

EL과 태그를 처리한 몸체 내용 사용하기


è  태그파일에서 몸체 내용의 EL이나 액션 태그 등을 처리한 결과를 사용하려면 tag 디렉티브의 body-content 속성값을 scriptless로 지정해야 한다 .


<jsp:doBody> 액션 태그를 이용해서 몸체 내용을 출력하거나 EL변수로 저장

è  <jsp:doBody> 액션태그는 2가지 형태로 사용

ㄱ.   <jsp:doBody/> : 몸체로 전달받은 내용을 그대로 출력한다.


ㄴ.   <jsp:doBody var=”변수명” scope=”영역”/>

è  몸체로 전달받은 내용을 var 속성으로 지정한 EL변수에 저장

è  Scope 속성을 이용해서 EL 변수를 저장할 영역을 지정한다.



예제를 통해서 익혀보자 . 


다음은 임의로 만들어준 tag파일이다.


<%@ tag language="java" pageEncoding="UTF-8"%>

<%@ tag body-content="scriptless"%> // body의 값이 존재한다.

<%@ attribute name="length" type="java.lang.Integer"%> // length 는 정수형

<%@ attribute name="trail"%> // trail 

<%@ attribute name="trim"%> // trim

<jsp:doBody var="content" scope="page" /> // body로 받아온 값들을 content에 저장시키고 , 범위는 page내에서 

<%

String content = (String) jspContext.getAttribute("content");


if (trim != null && trim.equals("true")) {

content = content.trim(); // 받아온 값의 공백을 제거 앞뒤로 ,

}

content = content.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?>", ""); // 쓸모없는 식별자들을 ""로 대체시킨다.


if (length != null && length.intValue() > 0 && content.length() > length.intValue()) { 

content = content.substring(0, length.intValue());

if (trail != null) {

content = content + trail;

}

}

%>

<%=content%>



<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ page import="java.util.Date"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> // core 태그 

<%@ taglib prefix="tf" tagdir="/WEB-INF/tags"%> // 파일 태그 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>use_removeHtml.jsp</title>

</head>

<body>

<c:set var="dateEL" value="<%=new Date()%>" /> // 현재 시간 생성 

<tf:removeHtml trim="true">

<font size="10"> 현재

<style>

시간

</style> 은 ${dateEL} 입니다 .

</font>

</tf:removeHtml> // 공백을 제거한 문자열 추출 . 

<br>

<tf:removeHtml length="15" trail="..." trim="true"> 

<u>현재 시간</u>은 <b>${dateEL}</b> 입니다. </tf:removeHtml> // content에 맞게 출력  , 15 미만의 글자수를 출력 

<br>

<tf:removeHtml length="15">

<jsp:body>

<u>현재 시간</u>은 <b>${dateEL}</b> 입니다.</jsp:body> // 15미만의 글자수를 출력 

</tf:removeHtml>

</body>

</html>



반응형