001 package hirondelle.web4j.model; 002 003 /** 004 Thrown when a Model Object (MO) cannot be constructed because of invalid 005 constructor arguments. 006 007 <P>Arguments to a MO constructor have two sources: the end user and the 008 the database. In both cases, errors in the values of these arguments 009 are outside the immediate control of the application. Hence, MO constructors 010 should throw a checked exception - (<tt>ModelCtorException</tt>). 011 012 <P>Using a checked exception has the advantage that 013 it cannot be ignored by the caller. 014 015 Example use case:<br> 016 <PRE> 017 //a Model Object constructor 018 Blah(String aText, int aID) throws ModelCtorException { 019 //check validity of all params. 020 //if one or more params is invalid, throw a ModelCtorException. 021 //for each invalid param, add a corresponding error message to 022 //ModelCtorException. 023 } 024 025 //call the Model Object constructor 026 try { 027 Blah blah = new Blah(text, id); 028 } 029 catch(ModelCtorException ex){ 030 //place the exception in scope, for subsequent 031 //display to the user in a JSP 032 } 033 </PRE> 034 035 <P>In the case of an error, the problem arises of how to redisplay the original, 036 erroneous user input. The {@link hirondelle.web4j.ui.tag.Populate} tag 037 accomplishes this in an elegant manner, simply by recycling the original 038 request parameters. 039 */ 040 public final class ModelCtorException extends AppException { 041 //empty 042 } 043