001 package hirondelle.web4j.model; 002 003 import hirondelle.web4j.action.Action; 004 import hirondelle.web4j.request.RequestParameter; 005 import hirondelle.web4j.request.RequestParser; 006 007 /** 008 Instructs WEB4J how to respond to any errors found during parsing of raw user input into 009 'base' types such as <tt>Integer</tt>, <tt>Date</tt>, and so on. 010 011 <P>See {@link hirondelle.web4j.BuildImpl} for important information on how this item is configured. 012 {@link hirondelle.web4j.BuildImpl#forConvertParamError()} 013 returns the configured implementation of this interface. 014 015 <P>On behalf of the application, {@link RequestParser} and related classes will parse 016 user input into various target types such as <tt>Integer</tt>, <tt>Date</tt> and so on, using 017 the configured implementation of {@link hirondelle.web4j.model.ConvertParam}. 018 This centralizes such repetitive parsing into the framework, and allows the application programmer to 019 mostly ignore the possibility of such errors - the <tt>try..catch</tt> block has 020 already been written. 021 022 <P>WEB4J performs such parsing as a <a href="../request/ApplicationFirewall.html#SoftValidation">soft validation</a>. 023 For example, if user input should be an {@link Integer} in the range <tt>0..150</tt>, then 024 WEB4J will attempt to parse the raw user input (a <tt>String</tt>) first into an 025 {@link Integer}. If that parse <em>succeeds</em>, 026 then WEB4J will pass the <tt>Integer</tt> on to an {@link Action}, which will then perform further 027 "business validation" using a business domain Model Object - that is, it will check that its value is in the range <tt>0..150</tt>. 028 So, an {@link Action} and its Model Object can almost always assume that an object of the correct 'base' type already exists, 029 without worrying about low level parsing problems. 030 031 <P>However, if user input <em>cannot be parsed</em> by WEB4J into the desired class, then an error message must 032 be displayed to the user. Implementations of this interface allow an application 033 programmer to specify the content of that response message. 034 035 <P>Please see the example application for an example implementation. 036 */ 037 public interface ConvertParamError { 038 039 /** 040 Return a {@link ModelCtorException} for a given parsing error, suitable for presentation to the end user. 041 042 @param aSupportedTargetClass identifies the class into which the user input cannot be successfully parsed 043 @param aUserInputValue value input by the user 044 @param aRequestParameter the request parameter 045 */ 046 public ModelCtorException get(Class<?> aSupportedTargetClass, String aUserInputValue, RequestParameter aRequestParameter); 047 048 }