Oi galera, estou tentando fazer uma taglib minha para usar formulários com atributos tipo java.util.Date
No struts-config.xml
<form-bean dynamic="true" name="alapoForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="chapa" type="java.lang.String"/>
<form-property name="data" type="java.util.Date"/>
...
No web.xml
...
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>rhmasterweb.ActionStrutsServletRHMW</servlet-class>
</servlet>
...
<taglib>
<taglib-uri>/tags/struts-html-rhmasterweb</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-html-rhmasterweb.tld</taglib-location>
</taglib>
...
No struts-html-rhmasterweb.tld
<tag>
<name>text</name>
<tagclass>rhmasterweb.TextTagRHMW</tagclass>
<attribute>
<name>accesskey</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
...
Minha Servlet
package rhmasterweb;
import java.util.Date;
import java.util.Locale;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.apache.struts.action.ActionServlet;
public class ActionStrutsServletRHMW extends ActionServlet {
public void init() throws ServletException {
super.init();
System.out.println("ActionStrutsServletRHMW.init()");
Locale locale = new Locale("pt", "BR");
DateLocaleConverter dateConverter = new DateLocaleConverter( locale, "dd/MM/yyyy" );
ConvertUtils.register( dateConverter, Date.class );
}
}
Minha TextTagRHMW.java
package rhmasterweb;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.jsp.JspException;
import org.apache.struts.taglib.html.TextTag;
/**
* @author felipe
*/
public class TextTagRHMW extends TextTag {
public TextTagRHMW() {
super();
this.type = "text";
doReadonly = true;
System.out.println("TextTagRHMW()");
}
protected String formatValue( Object value ) throws JspException {
if( value != null ) System.out.println( "value = " + value.toString() );
if( value instanceof Date ) {
try {
SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy" );
if( value != null ) System.out.println( "IF sdf = " + sdf.format( value ) );
return sdf.format( value );
} catch( Exception e ) {
if( value != null ) System.out.println( "IF super = " + super.formatValue( value ) );
return super.formatValue( value );
}
}
if( value != null ) System.out.println( "super = " + super.formatValue( value ) );
return super.formatValue( value );
}
}
E por fim meu código dentro do form da jsp para inserir os dados tipo Date
<td align="right"><bean:message key="prompt.data_2" /></td>
<td align="left" colspan="3"><htmlrhmw:text property="data" name="alapoInserirBusiness" size="10" maxlength="10" styleClass="texto" onkeyup="DateFormat(this,event,false);" onblur="DateFormat(this,event,true)"/></td>
Quando eu dou um submit no formulário ele dá o seguinte erro:
2006/08/25 11:59:45:307 BRT [WARN] org.apache.commons.validator.GenericTypeValidator - Fri Aug 25 00:00:00 BRT 2006 <java.text.ParseException: Unparseable date: "Fri Aug 25 00:00:00 BRT 2006">java.text.ParseException: Unparseable date: "Fri Aug 25 00:00:00 BRT 2006"
Me parece que ele leu a data certa, porém o DynaValidator Form não está conseguindo identificar que é uma data e converter para o tipo java.util.Date.
Alguém tem uma luz para me dar galera???
Vlwwwww