If you are using <esql/> you may need to transform a custom date string to a valid Java Date object.

Here is an example:

<esql:query>
select * from reports where date = #<xsp-request:get-parameter name="date"/>#
</esql:query>

The actual date of the <esql:query/> has to be in the format e.g. 01/29/2003. Using the esql parameter will result in java code that looks something like the following:

PreparedStatement statement = conn.prepareStatement("select * from reports where date = ?");
statement.setDate(1, myDate);

... but if you are a in e.g. Germany you are used to this date format: 29.01.2003.

Step 1 Create a HTML-Form save it as date.html in your cocoon-webapp dir.

<html>
<head>
<meta name="author"content="ThorstenScherler">
<title>TransformCustomDate</title>
</head>
<body>
<p>Please press Submit.</p>
<form action="date.xml" method="GET">
<input type="text" name="date" value="29.01.2003"/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>

On submit this will result in attaching /date.xml?date=29.01.2003 to the uri where the html form was called from.

Step 2 Create a file date.xsp and put this in your cocoon-webapp dir.

<xsp:page language="java" xmlns:xsp="http://apache.org/xsp">
<xsp:structure>
<xsp:include>java.util.*</xsp:include>
<xsp:include>java.text.*</xsp:include>
</xsp:structure>
<document>
<xsp:logic>
String datePattern = "dd.MM.yyyy";
SimpleDateFormat dateFormat = new SimpleDateFormat( datePattern );
String sDate_one ="";
 try
{
 sDate_one=request.getParameter("date");
  }
 catch( ParseException e )
{
 getLogger().error("XSP param error: ", e);
}
Date date_one = null;
 try
{
    date_one = dateFormat.parse( sDate_one );
}
catch( ParseException e )
{
 getLogger().error("XSP date error: ", e);
}
</xsp:logic>
<request>date.xml?sDate=<xsp:expr>date_one</xsp:expr>
</request>
<transformed>
<xsp:expr>date_one</xsp:expr>
</transformed>
</document>
</xsp:page>

Step 3 put this in your cocoon-webapp sitemap.xmap

<map:pipeline>
<map:match pattern="date">
<map:read src="date.html"/>
</map:match>
<map:match pattern="date.xml">
<map:generate type="xsp" src="date.xsp"/>
<map:serialize type="xml"/>
</map:match>
</map:pipeline>

Testing Now request http://localhost:8080/cocoon-webapp/date and press the Submit-Button.

If everything works fine you will see a XML-page with a valid date. If not - please check the logs.

Modifying the date-Format

String datePattern = "dd.MM.yyyy";

If you wish to modify the date-format please see SimpleDateFormat Class Reference.

Giving you an idea of how to do it:

String datePattern = "MM/dd/yyyy";

expect 01/31/2003 as the string-format.

Please let me know if you had problems with it. Scherler

  • No labels