| Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 06:10:33
|
fortunao
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 08:21:47
|
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" />
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 08:30:54
|
velo
![[Avatar]](/images/avatar/7f39f8317fbdb1988ef4c628eba02591.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 08:56:52
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 10:09:04
|
velo
![[Avatar]](/images/avatar/7f39f8317fbdb1988ef4c628eba02591.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 10:34:50
|
RubemAzenha
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 11:05:08
|
fortunao
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 |
Download
|
| Description |
Classe InputText |
| Filesize |
4 Kbytes
|
| Downloaded: |
111 time(s) |
| Filename |
BaseTag.java |
Download
|
| Description |
Classe BaseTag |
| Filesize |
8 Kbytes
|
| Downloaded: |
84 time(s) |
|
Alex Fortuna
Desenvolvedor Mentawai
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 11:11:41
|
fortunao
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 |
Download
|
| Description |
Classe InputDate |
| Filesize |
901 bytes
|
| Downloaded: |
86 time(s) |
|
Alex Fortuna
Desenvolvedor Mentawai
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 11:50:27
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 12:05:28
|
fortunao
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 12:10:10
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2006 14:13:53
|
fortunao
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2006 17:55:34
|
fortunao
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2006 18:48:41
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/03/2006 09:13:09
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
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
|
|
|
 |
|
|