[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Desenvolvimento de TagLib - Deixe sua Opinião  XML
Forum Index -> Comentários Gerais Go to Page: 1, 2, 3, 4, 5 Next 
Author Message
fortunao


[Avatar]
Joined: 17/03/2006 05:49:22
Messages: 186
Offline

Ola amigos.

Estou desenvolvendo algumas TagLibs para contribuir e melhorar ainda mais a parte (VIEW) do mentawai. Alias ainda não mostrei para os Administradores do projeto, mais quando eu terminar mostrarei e claro, mais to tentando fazer minha parte. heheheheheh!!!!

Aqueles que estão dispostos à ajudar serão bem vindos.

Ja estou terminando o desenvolvimento de uma que sera o InpuDate(Caixa de texto com calendário), e logo em seguida vou desenvolver a uma chamda InputCalc(Caixa de texto com calculadora).

Gostaria tambem de saber a opnião de todos sobre quais taglibs podem ser desenvolvidas para ajudar ainda mais os desenvolvedores na parte VIEW do mentawai.

Desde ja agradesço a opnião de todos.

Alex Fortuna
fortunao@hotmail.com
fortunao@gmail.com

Alex Fortuna
Desenvolvedor Mentawai


[Email] [MSN]
alexandre



Joined: 23/02/2006 11:48:04
Messages: 33
Location: São José dos Pinhais - PR
Offline

Eu fiz uma taglib que coloca ao lado do input um calendariozinho que abra um popup com datas tambem.
Isso seria uma boa pra ter como padrao no framework assim como o ww2 tem.

fiz assim :

Code:
 <user:input type="date" name="cliente.nascimento" size="11" />
 
velo


[Avatar]

Joined: 16/02/2006 13:33:54
Messages: 1197
Location: Jaraguá do Sul - SC
Offline

Opa cara...

Data é bem legal mesmo....

Outra coisa interessante seria um pra manipular tabelas dinamicamente, tipo um excel...........

Abas....

Deixa eu pensar.... aff, tem 500 mil coisas....

Bom, te add no msn, precisando de algo, me dá um toque.

Onde vc tah colocando o fonte? Tem como eu dar um look?


VELO

_____________________________________
Mentawai Developer
"When the only tool you have is a hammer, everything looks like a nail"
http://en.wikipedia.org/wiki/Golden_hammer
[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Muito bom Alex !!! É bom quando a gente vê as pessoas metendo a mão na massa para ajudar !

Seria muito interessante vc postar o seu código aqui. Para nós trocarmos idéias e para outras pessoas que estejam interessadas em fazer tags pegarem a manha.


Sergio Oliveira

velo


[Avatar]

Joined: 16/02/2006 13:33:54
Messages: 1197
Location: Jaraguá do Sul - SC
Offline

saoj wrote:
Muito bom Alex !!! É bom quando a gente vê as pessoas metendo a mão na massa para ajudar !

Seria muito interessante vc postar o seu código aqui. Para nós trocarmos idéias e para outras pessoas que estejam interessadas em fazer tags pegarem a manha.

 


Opa sergio, o Alex me mandou o código dele pelo skype... parece bem bacana....

Não rola uma branch no svn pra gente poder trabalhar junto no codigo?


VELO

_____________________________________
Mentawai Developer
"When the only tool you have is a hammer, everything looks like a nail"
http://en.wikipedia.org/wiki/Golden_hammer
[Email] [MSN]
RubemAzenha


[Avatar]
Joined: 30/06/2005 23:12:02
Messages: 472
Location: São Paulo, SP
Offline

Seus egoístas! Postem os fontes no fórum


Mentawai Developer
[WWW] [MSN]
fortunao


[Avatar]
Joined: 17/03/2006 05:49:22
Messages: 186
Offline

Caro amigos...

Segue abaixo os codigos das tags que eu estou criando...

Para não mexer nas classes de tag html que estão prontas o que eu fiz.

Criei uma classe chamada BaseTag que faz um exteds da HTMLTag(org.mentawai.tag.html.HTMLTag), pois dai eu consigo criar as novas tags sem alterar a estrutura das que ja estão prontas...

Inclusive criei um outro pacote chamado leticia, para não misturar com as tags que ja existem dentro do pacote html, mais esse nome do pacote depois podemos ver qual sera melhor...


Começa a classe BaseTag

Code:
 package org.mentawai.tag.html.leticia;
 
 import javax.servlet.jsp.JspException;
 import org.mentawai.tag.html.HTMLTag;
 
 public class BaseTag extends HTMLTag{
 	
 	private static final long serialVersionUID = 1L;
 		
 	//Atributes Standards.
 	
 	/** Name in component . */
 	private String name = null;
 	/** Id in compoenent. */
 	private String id = null;
 	/** Class in compoenent. */
 	private String klass = null;
 	/** Disabled component. */
 	private String disabled  = null;
 	/** Style in component. */
 	private String klassStyle = null;
 	/** Title(Hint) in component. */
 	private String title = null;	
 	
     //  Mouse Events
 
     /** Mouse click event. */
     private String onclick = null;
 
     /** Mouse double click event. */
     private String ondblclick = null;
 
     /** Mouse over component event. */
     private String onmouseover = null;
 
     /** Mouse exit component event. */
     private String onmouseout = null;
 
     /** Mouse moved over component event. */
     private String onmousemove = null;
 
     /** Mouse pressed on component event. */
     private String onmousedown = null;
 
     /** Mouse released on component event. */
     private String onmouseup = null;
 
     //  Keyboard Events
 
     /** Key down in component event. */
     private String onkeydown = null;
 
     /** Key released in component event. */
     private String onkeyup = null;
 
     /** Key down and up together in component event. */
     private String onkeypress = null;
 
     // Text Events
 
     /** Text selected in component event. */
     private String onselect = null;
 
     /** Content changed after component lost focus event. */
     private String onchange = null;
 
     // Focus Events and States
 
     /** Component lost focus event. */
     private String onblur = null;
 
     /** Component has received focus event. */
     private String onfocus = null;
 
 	
 	public String getDisabled() {
 		return disabled;
 	}
 	public void setDisabled(String disabled) {
 		this.disabled = disabled;
 	}
 		
 	public String getId() {
 		return id;
 	}
 	public void setId(String id) {
 		this.id = id;
 	}
 	public String getKlass() {
 		return klass;
 	}
 	public void setKlass(String klass) {
 		this.klass = klass;
 	}
 	public String getKlassStyle() {
 		return klassStyle;
 	}
 	public void setKlassStyle(String klassStyle) {
 		this.klassStyle = klassStyle;
 	}
 	public String getName() {
 		return name;
 	}
 	public void setName(String name) {
 		this.name = name;
 	}
 	public String getTitle() {
 		return title;
 	}
 	public void setTitle(String title) {
 		this.title = title;
 	}
 		
 	
     
 	
 	
 	public String getStringToPrint() throws JspException {
 		// TODO Auto-generated method stub
 		return null;
 	}
 	
 //	 Mouse Events
 
     /** Sets the onClick event handler. */
     public void setOnclick(String onClick) {
         this.onclick = onClick;
     }
 
     /** Returns the onClick event handler. */
     public String getOnclick() {
         return onclick;
     }
 
     /** Sets the onDblClick event handler. */
     public void setOndblclick(String onDblClick) {
         this.ondblclick = onDblClick;
     }
 
     /** Returns the onDblClick event handler. */
     public String getOndblclick() {
         return ondblclick;
     }
 
     /** Sets the onMouseDown event handler. */
     public void setOnmousedown(String onMouseDown) {
         this.onmousedown = onMouseDown;
     }
 
     /** Returns the onMouseDown event handler. */
     public String getOnmousedown() {
         return onmousedown;
     }
 
     /** Sets the onMouseUp event handler. */
     public void setOnmouseup(String onMouseUp) {
         this.onmouseup = onMouseUp;
     }
 
     /** Returns the onMouseUp event handler. */
     public String getOnmouseup() {
         return onmouseup;
     }
 
     /** Sets the onMouseMove event handler. */
     public void setOnmousemove(String onMouseMove) {
         this.onmousemove = onMouseMove;
     }
 
     /** Returns the onMouseMove event handler. */
     public String getOnmousemove() {
         return onmousemove;
     }
 
     /** Sets the onMouseOver event handler. */
     public void setOnmouseover(String onMouseOver) {
         this.onmouseover = onMouseOver;
     }
 
     /** Returns the onMouseOver event handler. */
     public String getOnmouseover() {
         return onmouseover;
     }
 
     /** Sets the onMouseOut event handler. */
     public void setOnmouseout(String onMouseOut) {
         this.onmouseout = onMouseOut;
     }
 
     /** Returns the onMouseOut event handler. */
     public String getOnmouseout() {
         return onmouseout;
     }
 
     // Keyboard Events
 
     /** Sets the onKeyDown event handler. */
     public void setOnkeydown(String onKeyDown) {
         this.onkeydown = onKeyDown;
     }
 
     /** Returns the onKeyDown event handler. */
     public String getOnkeydown() {
         return onkeydown;
     }
 
     /** Sets the onKeyUp event handler. */
     public void setOnkeyup(String onKeyUp) {
         this.onkeyup = onKeyUp;
     }
 
     /** Returns the onKeyUp event handler. */
     public String getOnkeyup() {
         return onkeyup;
     }
 
     /** Sets the onKeyPress event handler. */
     public void setOnkeypress(String onKeyPress) {
         this.onkeypress = onKeyPress;
     }
 
     /** Returns the onKeyPress event handler. */
     public String getOnkeypress() {
         return onkeypress;
     }
 
     // Text Events
 
     /** Sets the onChange event handler. */
     public void setOnchange(String onChange) {
         this.onchange = onChange;
     }
 
     /** Returns the onChange event handler. */
     public String getOnchange() {
         return onchange;
     }
 
     /** Sets the onSelect event handler. */
     public void setOnselect(String onSelect) {
         this.onselect = onSelect;
     }
 
     /** Returns the onSelect event handler. */
     public String getOnselect() {
         return onselect;
     }
 
     // Focus Events and States
 
     /** Sets the onBlur event handler. */
     public void setOnblur(String onBlur) {
         this.onblur = onBlur;
     }
 
     /** Returns the onBlur event handler. */
     public String getOnblur() {
         return onblur;
     }
 
     /** Sets the onFocus event handler. */
     public void setOnfocus(String onFocus) {
         this.onfocus = onFocus;
     }
 
     /** Returns the onFocus event handler. */
     public String getOnfocus() {
         return onfocus;
     }
 
 /** Methood to prepare attributes in component  */		
 protected void prepareAttribute(StringBuffer handlers, String name, Object value) {
         if (value != null) {
             handlers.append(" ");
             handlers.append(name);
             handlers.append("=\"");
             handlers.append(value);
             handlers.append("\"");
         }
     }
 
 [color=red]/** 
 *  Foi separado alguns metodos de eventos javascript, pois alguns compoentes não possuem os mesmos eventos que outros, por isso no desenvolvimento das tags fica mais flexivel o tratamento de quais são os eventos que cada compoente tem
 */[/color]
 
 
 /** Methood to prepare attributes Javascript in component  */	
 protected void prepareMouseEvents(StringBuffer handlers) {
         prepareAttribute(handlers, "onclick", getOnclick());
         prepareAttribute(handlers, "ondblclick", getOndblclick());
         prepareAttribute(handlers, "onmouseover", getOnmouseover());
         prepareAttribute(handlers, "onmouseout", getOnmouseout());
         prepareAttribute(handlers, "onmousemove", getOnmousemove());
         prepareAttribute(handlers, "onmousedown", getOnmousedown());
         prepareAttribute(handlers, "onmouseup", getOnmouseup());
     }
 
 /** Methood to prepare attributes Javascript in component  */	
     protected void prepareKeyEvents(StringBuffer handlers) {
         prepareAttribute(handlers, "onkeydown", getOnkeydown());
         prepareAttribute(handlers, "onkeyup", getOnkeyup());
         prepareAttribute(handlers, "onkeypress", getOnkeypress());
     }
 /** Methood to prepare attributes Javascript in component  */    
     protected void prepareTextEvents(StringBuffer handlers) {
         prepareAttribute(handlers, "onselect", getOnselect());
         prepareAttribute(handlers, "onchange", getOnchange());
     }
     
     protected void prepareFocusEvents(StringBuffer handlers) {
         prepareAttribute(handlers, "onblur", getOnblur());
         prepareAttribute(handlers, "onfocus", getOnfocus());
     }
     
     //Metodo para identificar se o e html ou XHTML, pois o modo de fechar as tags são diferentes.. Ex: html " >"   Xhtml  " />"
     protected boolean isXhtml() {
         return true;
     }   
 }



Todas as tag que estou criando são separadas, para assim facilitar a reutilização de codigo. Logo abaixo seque o codigo da classe InpuText(Caixa de texto), pois para outras tags que utilizarão caixa de texto eu posso fazer um Extends dela.

Começa a classe InputText que faz um extends da BaseTag.

Code:
 package org.mentawai.tag.html.leticia;
 
 import javax.servlet.jsp.JspException;
 
 public class InputText extends BaseTag {
 		
 	private static final long serialVersionUID = 1L;
 
 	//Attribute private class
 	/** Value component */
 	private String value  = null;
 	/** Maxlength componente */
 	private String maxlength = null;
 	/** Size component */
 	private String size = null;
 	/** Readonly component */
 	private String readonly = null;
 	
 	/** Constructor Standard */
 	public InputText(){
 	 	
 	}	
 	/** Construct set's all atributte */
     public InputText(String name,
     		         String id,
     		         String klass,
     		         String KlassStyle,
     		         String size,
     		         String maxlength,
     		         String disabled,
     		         String readonly){
     	setAll(name,id,klass,KlassStyle,size,maxlength,disabled,readonly);	   	
 	}
 		
 	/** Method to build tag */
     protected StringBuffer buildTag() {
 		StringBuffer results = new StringBuffer("<input");
 		prepareAttribute(results, "type","text");
 		prepareAttribute(results, "name",getName());
 		prepareAttribute(results, "id",getId());
 		prepareAttribute(results, "class",getKlass());
 		prepareAttribute(results, "style",getKlassStyle());
 		prepareAttribute(results, "size",getSize());
 		prepareAttribute(results, "maxlength",getMaxlength());
 		prepareAttribute(results, "disabled",getDisabled());
 		prepareAttribute(results, "readonly",getReadonly());
 		prepareValue(results);
 		results.append(this.prepareEventHandlers());
 		return results;
 	}		
 	
 	/** Method to prepare value component */
 	protected void prepareValue(StringBuffer results){
 		Object value = findObject(getName());
 		if (value != null) results.append(" value=\"").append(value).append("\"");		
         else if (getValue() != null) results.append(" value=\"").append(getValue()).append("\"");
 	}
 	
 	/** Method to prepare events JavaScript in compoenent */
 	protected String prepareEventHandlers() {
 		StringBuffer handlers = new StringBuffer();
 		prepareMouseEvents(handlers);
 		prepareKeyEvents(handlers);
 		prepareTextEvents(handlers);
 		prepareFocusEvents(handlers);
 		return handlers.toString();
 	}
 	
 	/** Method to close compoenent */
 	protected String getTagClose() {
 		return this.isXhtml() ? " />" : ">";
 	}
 		
 	public String getStringToPrint() throws JspException {
 		StringBuffer results = new StringBuffer(200);
 		results.append(buildTag().toString());		
 		results.append(this.getTagClose());
 		return results.toString();
 	}	
 	
 	public void setAll(String name,
 	         	       String id,
 	                   String klass,
 	                   String KlassStyle,
 	                   String size,
 	                   String maxlength,
 	                   String disabled,
 	                   String readonly){
 		setName(name);  setId(id);
 		setKlass(klass);
 		setKlassStyle(KlassStyle);
 		setSize(size);
 		setMaxlength(maxlength);
 		setDisabled(disabled);
 		setReadonly(readonly);		
 	}
 	
 	
 	
 	/** Return Maxlength in component */
 	public String getMaxlength() {
 		return maxlength;
 	}	
 	/** Sets Maxlength in component*/	
 	public void setMaxlength(String maxlength) {
 		this.maxlength = maxlength;
 	}	
 	/** Return Value component */
 	public String getValue() {
 		return value;
 	}
 	/** Sets values component */	
 	public void setValue(String value) {
 		this.value = value;
 	}
 	/** Return Size component */
 	public String getSize() {
 		return size;
 	}
 	/** Set size component */
 	public void setSize(String size) {
 		this.size = size;
 	}	
 	/** Return state readonly component */
 	public String getReadonly() {
 		return readonly;
 	}
 	/** Set state readonly component. */
 	public void setReadonly(String readonly) {
 		this.readonly = readonly;
 	}
 	
 	
 	
 }


O codigo abaixo trata-se de uma tag que ainda estou criando, mais postei somente para possam entender sobre a reutilização de codigo que citei logo acima.

Começa a classe InputDate(Caixa de texto com calendário) que faz um extends da InputText

Classe ainda em desenvolvimento.

Code:
 package org.mentawai.tag.html.leticia;
 
 import javax.servlet.jsp.JspException;
 
 public class InputDate extends InputText {
 	
 	private static final long serialVersionUID = 1L;
 	
 	private String dateFormat = null;
 
 	/** Retorna o Formato da Data. */
 	public String getDateFormat() {
 		return dateFormat;
 	}
 	/** Seta o Formato da Data */
 	public void setDateFormat(String dateFormat) {
 		this.dateFormat = dateFormat;
 	}
 	
 	/** Method to build tag */	
     public StringBuffer buildTag() {
 	    StringBuffer results = new StringBuffer(super.buildTag().toString());
 	    //prepareAttribute(results, "onkeypress",getDateFormat());
 	    return results;
 	}
 	
 	public String getStringToPrint() throws JspException {
 		StringBuffer results = new StringBuffer(200);
 		results.append(buildTag().toString());		
 		results.append(getTagClose());
 		return results.toString();
 	}	
 	
 }


Esta e apenas uma ideia incial que tive, podendo ser alterado caso tenham ideias melhores, qualquer coisa favor entrar em contato.

Gostaria tambem que os Administradores do projeto Mentawai dessem um parecer sobre o assunto. Pois gostaria de saber se estou fazendo algo fora dos padões do projeto, pois vou desenvolver varias tags.



Desde ja agradesço a todos.

Alex Fortuna
fortunao@hotmail.com
fortunao@gmail.com

[code]
 Filename InputText.java [Disk] Download
 Description Classe InputText
 Filesize 4 Kbytes
 Downloaded:  111 time(s)

 Filename BaseTag.java [Disk] Download
 Description Classe BaseTag
 Filesize 8 Kbytes
 Downloaded:  84 time(s)


Alex Fortuna
Desenvolvedor Mentawai


[Email] [MSN]
fortunao


[Avatar]
Joined: 17/03/2006 05:49:22
Messages: 186
Offline

Esqueci de mandar a Arquivo InpuDate.java

Ja estou usando a versão 1.2 do mentawai para desenvolvimento destas tags.

T++
 Filename InputDate.java [Disk] Download
 Description Classe InputDate
 Filesize 901 bytes
 Downloaded:  86 time(s)


Alex Fortuna
Desenvolvedor Mentawai


[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Excelente Alex. Parece que vc manja do assunto mesmo.

Faz o seguinte: constrói um mini-projeto web exemplo, com uma página só demonstrando essas tags em prática. Funcionando bonito a gente comita no mentawai para a versão 1.2.1.

Sergio

Sergio Oliveira

fortunao


[Avatar]
Joined: 17/03/2006 05:49:22
Messages: 186
Offline

Beleza.. vou terminar esta InputDate e depois mando o exemplo pra todos darem uma olhada na facilidade que as tags proporcionarão aos desenvolvedores...


Obrigado pela oportunidade, e ainda quero lembrar que estou a disposição para opniões.

Desenvolver eu quero, mais me falta o que fazer.. hehehehe


Alex Fortuna
fortunao@hotmail.com
fortunao@gmail.com

Alex Fortuna
Desenvolvedor Mentawai


[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Acho que essas tags vão ajudar muiiiiitttttoooo e vc está no caminho certo para se tornar um contribuidor do Mentawai,
e depois com a aprovação da equipe através de um ritual secreto, vc pode se tornar um desenvolvedor oficial.

Posta um war aqui com o projeto teste pra gente ver !


Sergio Oliveira

fortunao


[Avatar]
Joined: 17/03/2006 05:49:22
Messages: 186
Offline

Beleza assim que terminar eu posto....

Esse fim de semana vou me empenhar o maximo neste projeto, ta arriscado ate eu perder a mulher, pois vou varar a madrugada mexendo com isso....

Brincadeira pessoal e so pra descontrair um pouco...


Alex Fortuna
fortunao@hotmail.com
fortunao@gmail.com


Alex Fortuna
Desenvolvedor Mentawai


[Email] [MSN]
fortunao


[Avatar]
Joined: 17/03/2006 05:49:22
Messages: 186
Offline

Ola amigos..

So queria que todos soubessem que ja ja teremos uma versão beta das taglibs que estou desenvolvendo para o nosso mentawai.


Aguardem ainda essa semanda teremos novidades...



Alex Fortuna
fortunao@gmail.com
fortunao@hotmail.com

Alex Fortuna
Desenvolvedor Mentawai


[Email] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Boa, faz um projetinho exemplo bonitinho pra gente instalar.

Ver na prática vale mais do que mil explicações !


Sergio Oliveira

boaglio


[Avatar]

Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline


Que bom quando vc pensa em fazer alguma coisa e já tem gente fazendo!

Legal Alex!

Como vc pretende definir a máscara dessa data?

Seguindo o seu exemplo, se for:
Code:
 <user:input type="date" name="cliente.nascimento" size="11" />
 


Ele pegaria uma máscara default, tipo DD-MON-YYYY.
Senão o usuário define na tag:

Code:
 <user:input type="date" name="cliente.nascimento" size="11" mask="YYYY-MM-DD" />
 


Vc pretende fazer o JavaScript em um arquivo separado?
Isso é uma boa prática, que economiza tráfego de rede, pois
os arquivos .js ficam em cache no browser.

http://www.boaglio.com
[WWW]
 
Forum Index -> Comentários Gerais Go to Page: 1, 2, 3, 4, 5 Next 
Go to:   
Powered by JForum 2.1.6 © JForum Team