[RESOLVIDO]Tag customizada

1 resposta
A

pessoal, tenho um pequeno problema.
Eu crie uma tag para ser utilizada em uma jsp.
esta tag cria um campo de data. E então eu dou a opção
ao programador de adicionar um calendario, facilitando assim a vida do usuario(para que não precise ficar digitando a data).
se o programador quiser o calendario deve SETAR o atributo “habilitarCalendario=‘true’” na JSP.
Só que este calendario precisa de dois arquivos para poder ser utilizado, um com o CSS e um com JAVASCRIPT.
O problema é que a cada vez que programador adicionar esta tag, sera adicionado as duas linhas(css, javascript), mesmo precisando
adiciona-las uma unica só vez.
Segue a baixo a classe que cria tag.

public class TagCampoData extends AbstractTag
{
	private String habilitarCalendario;       

	public int doStartTag() throws JspException
	{
			print(getCampoData());
	}

	private String getCampoData()
	{
		StringBuffer html = new StringBuffer();
		html.append("<input type=\"text\" ");
		html.append(" name=\"" + getName() + "\" ");
                ....
		if (Validador.isStringValida(getHabilitarCalendario()))
		{
			html.append(" habilitarCalendario=\"" + getHabilitarCalendario() + "\" ");
		}
		....
		html.append(" maxlength=\"" + getMaxlength() + "\" ");
		html.append(preencheOnBlur());
		html.append(" />");
		if (getHabilitarCalendario().equalsIgnoreCase("true")) 
		{
			html.append(habilitaCalendario());
		}
		return html.toString();
	}

	private String habilitaCalendario()
	{
		StringBuffer html = new StringBuffer();
//estas são as duas linhas que precisaria estar adicionando somente uma vez, porém ainda não sei como posso fazer isso!
		html.append("<link rel=\"StyleSheet\" href=\"/estilos/calendar.css\" type=\"text/css\">");
		html.append("<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/calendar/calendar.js\"></script>");
//-----------
		html.append("<img src=\"/imagens/calendar/calendar.jpeg\" ");
		html.append(preencheOnClick());
		html.append(" />");
		return html.toString();
	}

	private String preencheOnClick()
	{...}

	private String preencheOnBlur()
	{...}

	public void setHabilitarCalendario(String habilitarCalendario)
	{...}

	public String getHabilitarCalendario()
	{...}
}

Se alguem tiver alguma ideia de como poderei fazer para que o link de CSS e o de JAVASCRIPT seja adicionado somente uma unica
vez em cada JSP(desde que seja necessário), eu agradeceria mto.

vlw…

1 Resposta

A
public class TagCampoData extends AbstractTag  
    {
  	public static final String JAFOIIMPORTADOESTILOEJAVASCRIPT = "jaFoiImportadoEstiloEJavascript";
	public static final String NAOIMPORTARESTILOEJAVASCRIPT = "naoImportarEstiloEJavascript";
        private String habilitarCalendario;         
   
        private String getCampoData()  
       {  
           StringBuffer html = new StringBuffer();  
           if (getHabilitarCalendario().equalsIgnoreCase("true"))
	    {
	      if(pageContext.getRequest().getParameter(NAOIMPORTARESTILOEJAVASCRIPT) == null || 		 pageContext.getRequest().getParameter(NAOIMPORTARESTILOEJAVASCRIPT).equals("")){
				String jaFoiImportadoPage = (String) pageContext.getAttribute(JAFOIIMPORTADOESTILOEJAVASCRIPT , PageContext.PAGE_SCOPE );
		if(jaFoiImportadoPage == null || jaFoiImportadoPage.equals(""))
		   {
			html.append("<link rel=\"StyleSheet\" href=\"/estilos/calendar.css\" type=\"text/css\">");
			html.append("<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/calendar  /calendar.js\"></script>\n");
			pageContext.setAttribute(JAFOIIMPORTADOESTILOEJAVASCRIPT , "true" , PageContext.PAGE_SCOPE );
    		   }
	     }
	}           
           html.append("<input type=\"text\" ");  
           html.append(" name=\"" + getName() + "\" ");  
                   ....  
           if (Validador.isStringValida(getHabilitarCalendario()))  
           {  
               html.append(" habilitarCalendario=\"" + getHabilitarCalendario() + "\" ");  
           }  
           ....  
           html.append(" />");  
           if (getHabilitarCalendario().equalsIgnoreCase("true"))   
           {  
               html.append(habilitaCalendario());  
           }  
           return html.toString();  
       }  
     
       private String habilitaCalendario()  
       {  
           StringBuffer html = new StringBuffer();  
           html.append("<img src=\"/imagens/calendar/calendar.jpeg\" ");  
           html.append(preencheOnClick());  
           html.append(" />");  
           return html.toString();  
       }  
     
       private String preencheOnClick()  
       {...}  
     
      public void setHabilitarCalendario(String habilitarCalendario)  
       {...}  
     
       public String getHabilitarCalendario()  
       {...}  
   }
Criado 14 de junho de 2011
Ultima resposta 16 de jun. de 2011
Respostas 1
Participantes 1