Posts Tagged ‘struts’
11
mag

Quando si lavora con Struts può essere necessario inviare a video un messaggio per l’utente che indica il tipo di errore che magari egli ha commesso nell’inserimento di un dato oppure come risposta ad un errore del sistema stesso. In questo caso si può utilizzare ActionErrors. Nella action Java dove elaborate le informazioni dovrete creare queste quattro linee di codice:

ActionErrors errors = new ActionErrors();
ActionError error = new ActionError("error.nomeNonPresente");
errors.add(ActionErrors.GLOBAL_ERROR, error);
saveErrors(request, errors);

dove error.nomeNonPresente è stato definito nell’ApplicationResources.properties.

Nella pagina dove volete visualizzare l’errore dovrete invece inserire quanto segue:

<html:messages id="error">
<c:out value="${error}"/>
</html:messages>

Non dimenticate di includere nella pagina stessa la chiamata alle giuste taglib (nel nostro caso abbiamo usato quelle di Struts):

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>

, , , , ,

29
apr

Torniamo ancora sull’argomento Validator di Struts. Purtroppo quello dei numeri e delle date è un campo nel quale la validazione trova molti ostacoli a causa delle diverse convenzioni internazionali. Per poter validare un numero come un buon italiano lo scriverebbe occorre dunque ricorrere a qualche stratagemma e di certo le Espressioni Regolari possono venirci incontro. Per essere più precisi vogliamo validare un qualunque numero nella forma nnn.nnn.nnn,nn come ad esempio 1.230,54. Possiamo dunque usare una espressione regolare come questa:

^[0-9]*[.,]?[0-9]+$

…ed integrarla nel file validation.xml di Struts in questo modo:

<field depends="mask" indexedListProperty="rows" property="speseViaggio">
<arg0 key="label.speseViaggio"/>
<var><var-name>mask</var-name><var-value>^[0-9]*[.,]?[0-9]+$</var-value></var>
</field>

, , ,

27
apr

Chiunque abbia mai utilizzato Struts ed il suo Validator conosce di certo la potenza di tale mezzo. Mi sono trovato, però, a dover affrontare un problema poco documentato: la validazione dei campi indicizzati (indexed=”true”) di una form, in particolare nel momento in cui ogni riga della form è rappresentata da un proprio bean. La soluzione passa comunque per un paio di accorgimenti e l’indicazione di un attributo. Se ad esempio abbiamo una form rappresentata in questo modo:

<form-bean name="DoProductionProcessForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="cliente" type="java.lang.String"/>
<form-property name="riferimento" type="java.lang.String"/>
<form-property name="righe" type="it.test.controller.form.ProcessRow[]"/>
</form-bean>

La validazione di un campo di ProcessRow (rappresentato dai metodi get/set) come dataInizio potrebbe essere la seguente:

<field depends="required,date" indexedListProperty="righe"  property="dataInizio">
<arg0 key="label.dataInizio"/>
<var><var-name>datePatternStrict</var-name><var-value>dd/MM/yyyy HH:mm:ss</var-value></var>
</field>

, ,