GenericStruts è una libreria creata per semplificare l'implementazione di applicazioni Web basate su Framework STRUTS e HIBERNATE.
Vengono offerte una serie di classi che implementano già le principali funzionalità tipiche, generalmente richieste in questo modello di sviluppo.
I package principali che compongono la libreria sono:
Il Package action.generic raggruppa classi utilizzabili come base per l'implementazione delle proprie STRUTS ACTION.
Vengono messe a disposizione le classi GenericAction e GenericModelAction, che estendendo ActionSupport.
E' possibile dunque avvantaggiarsi delle funzionalità di GenericAction o GenericModelAction estendendo le proprie STRUTS ACTION con queste classi anzichè con ActionSupport.
public class MyAction extends GenericAction { .... } public class MyModelAction extends GenericModelAction { public MyModelAction() { super(MyModel.class); } }
GenericAction : classe che estende ActionSupport aggiungendo una serie di metodi comuni
Passaggio di parametri ad una Struts Action
Metodi disponibili in GenericAction e GenericModelAction
public Map<String, String> getParams(); public void setParams(final Map<String, String> params); public void addParam(String key, String value);
esempio di passaggio di parametri statici a MyAction da struts.xml
<action name="test" class="action.MyAction"> .... <param name="myparam">myvalue</param> .... </action>
https://struts.apache.org/docs/static-parameters-interceptor.html
Accesso agli ogggetti Request e Response
// REQUEST public HttpServletRequest getServletRequest(); public void setServletRequest(HttpServletRequest request);
https://struts.apache.org/docs/how-can-we-access-the-httpservletrequest.html
// RESPONSE public HttpServletResponse getServletResponse(); public void setServletResponse(HttpServletResponse response);
https://struts.apache.org/docs/how-can-we-access-the-httpservletresponse.html
Gestione della Autenticazione
// AUTHENTICATION BEAN public IAuthBean getAuthBean(); // SET ROLE NAMES public static void setAdminRole(final String roleName); public static void setPowerUserRole(final String roleName); // IS AUTHENTICATED USERS IN ROLE? public boolean getIsInAdminRoleUserMode(); public boolean getIsInPowerUserRoleUserMode(); public boolean getIsAtLeastInPowerUserRoleUserMode();
Gestisce i messaggi e gli errori per la visualizzazione Web e per la stampa su standard output
// MESSAGES public void addActionStandardMessage(final GenericException e); // ERRORS public void addActionStandardError(final GenericException e); // SECURITY ERRORS public void addSecurityError(final String securityMessage); protected void commitSecurityErrors(); // PRINT TO STANDARD OUTPUT protected void printStandardMessage(final Throwable e); protected void printStandardError(final Throwable e);
esempio
public class MyAction extends GenericAction { .... // EXAMPLE 1 public Collection<MyModel> getListMyModel() { try { return MyModelDAO.getList(null); } catch (final GenericException e) { addActionStandardError(e); printStandardError(e); } return null; } // EXAMPLE 2 @SkipValidation public void doSomething() { try { ... your code ... } catch (final GenericException e) { addActionStandardError(new GenericException("something is wrong",e)); } } // EXAMPLE 3 @Override public boolean getLoadSecurityConstraint() { if (getIsInAdminRoleUserMode()) return true; addSecurityError("Admin role required for view MyModel "+model.getId()); return false; } .... }
Invio di una Mail
public String sendByMail(); public ISendMailBean getSendMailBean() throws GenericException;
esempio
public class MyAction extends GenericAction { ... @Override public ISendMailBean getSendMailBean(final MyModel model) throws GenericException { final Collection<String> mailAddressA = new ArrayList<String>(); final Collection<String> mailAddressCC = new ArrayList<String>(); final Collection<String> mailAddressBCC = new ArrayList<String>(); // A try { if (model.getUser().getEmail()!=null) mailAddressA.add(model.getUser().getEmail()); } catch (final Exception e) {} // CC try { if (model.getAnotherUser().getEmail()!=null) mailAddressCC.add(model.getAnotherUser().getEmail()); } catch (final Exception e) {} // BCC mailAddressBCC.add(MAILBACKUP); final ISendMailBean sendMailBean = new SendMailBean(); sendMailBean.setMailTO(mailAddressA); sendMailBean.setMailCC(mailAddressCC); sendMailBean.setMailBCC(mailAddressBCC); //SUBJECT sendMailBean.setSubject("My subject"); //CONTENT sendMailBean.setContent("My content"); return sendMailBean; } ... }
struts.xml
<action name="testmail" class="action.MyAction" method="sendByMail"> .... </action>
Upload di File multipli
public IMultipleFileUploadBean getFileUploadBean(); public void setFileUploadBean(final IMultipleFileUploadBean multipleFileUploadBean);
Paginazione di una lista di risultati
public IResultPaginator getResultPaginator(); public void nextPage(); public void previousPage(); public void firstPage(); public void lastPage();
GenericModelAction : estende GenericAction aggiungendo il supporto per MODEL e DAO (Pattern MVC)
Cosa fa?
Rispetto alla GenerinAction, questa classa fornisce i metodi per la gestione del modello
Le sue Funzionalità
Cosa aggiunge GenericModelAction?
L’accesso ad un modello - oggetto che implementa l’interfaccia IModel.
IModel è una interfaccia che richiede l’implementazione dei metodi getId e setId per ottenere e impostare rispettivamente l’indentificativo univoco di un modello (UID).
Raggruppa una serie di metodi necessari per la gestione dei DAO Hibernate
HibernateSessionFactoryHelper : classe che implementa logiche di gestione delle sessioni Hibernate
Le sue funzioni
HibernateDAO : estende HibernateSessionFactoryHelper fornendo una serie di metodi per la gestione dei DAO
Le sue funzioni
tutte le eccezioni generate dalla libreria utilizzano oggetti di tipo GenircException(Estensione di Exception)
implementa Servlet Context Listener
Cosa fa?
Inizializza campi statici delle classi di GenericStruts leggendo i parametri dal contesto (Context.xml)
implementa il pattern OpenSessionInView
Permette di inviare Mail
MailNotifier: Thread che per l’invio di Mail in background schedulate
implementa una model standard utilizzato per i DAO Hibernate