Author: kmorin Date: 2013-01-07 17:38:05 +0100 (Mon, 07 Jan 2013) New Revision: 154 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/154 Log: refs #1899 [Ecran Trait] Cr?\195?\169er un ?\195?\169diteur de position spatiale validation Added: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-error-validation.xml trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties trunk/tutti-ui-swing/src/main/resources/validators.xml Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-01-04 17:38:11 UTC (rev 153) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-01-07 16:38:05 UTC (rev 154) @@ -149,13 +149,16 @@ buttonGroup: "gearShootingCoordinates"; } +CardLayout2Ext { + selected: {model.isUseSexagecimalFormat() ? "DMS" : "DD"}; +} + .degree { autoPopup: false; showPopupButton: false; showReset: false; useFloat: false; useSign: true; - numberPattern: {"-?" + INT_3_DIGITS_PATTERN}; } .minute { @@ -176,9 +179,14 @@ numberPattern: {INT_2_DIGITS_PATTERN}; } +#gearShootingStartLongitudePanel { + layout:{gearShootingStartLongitudeLayout}; +} + #gearShootingStartLongitudeDMSDegreeField { property: gearShootingStartLongitudeDegree; model: {model.getGearShootingStartLongitudeDegree()}; + numberPattern: {"-?" + INT_3_DIGITS_PATTERN}; } #gearShootingStartLongitudeDMSMinuteField { @@ -199,9 +207,14 @@ useSign: true; } +#gearShootingStartLatitudePanel { + layout:{gearShootingStartLatitudeLayout}; +} + #gearShootingStartLatitudeDMSDegreeField { property: gearShootingStartLatitudeDegree; model: {model.getGearShootingStartLatitudeDegree()}; + numberPattern: {"-?" + INT_2_DIGITS_PATTERN}; } #gearShootingStartLatitudeDMSMinuteField { @@ -232,9 +245,14 @@ date: {model.getGearShootingStartDate()}; } +#gearShootingEndLongitudePanel { + layout:{gearShootingEndLongitudeLayout}; +} + #gearShootingEndLongitudeDMSDegreeField { property: gearShootingEndLongitudeDegree; model: {model.getGearShootingEndLongitudeDegree()}; + numberPattern: {"-?" + INT_3_DIGITS_PATTERN}; } #gearShootingEndLongitudeDMSMinuteField { @@ -255,9 +273,14 @@ useSign: true; } +#gearShootingEndLatitudePanel { + layout:{gearShootingEndLatitudeLayout}; +} + #gearShootingEndLatitudeDMSDegreeField { property: gearShootingEndLatitudeDegree; model: {model.getGearShootingEndLatitudeDegree()}; + numberPattern: {"-?" + INT_2_DIGITS_PATTERN}; } #gearShootingEndLatitudeDMSMinuteField { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-01-04 17:38:11 UTC (rev 153) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-01-07 16:38:05 UTC (rev 154) @@ -39,6 +39,7 @@ jaxx.runtime.swing.editor.bean.BeanDoubleList jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.TimeEditor + jaxx.runtime.swing.CardLayout2Ext jaxx.runtime.validator.swing.SwingValidatorUtil jaxx.runtime.validator.swing.SwingValidatorMessageTableModel @@ -47,7 +48,6 @@ org.jdesktop.swingx.JXTable java.awt.Dimension - java.awt.CardLayout javax.swing.DefaultListModel javax.swing.ListSelectionModel @@ -75,7 +75,9 @@ <SwingValidatorMessageTableModel id='errorTableModel'/> - <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' + <BeanValidator id='validator' + bean='model' + errorTableModel='errorTableModel' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='stationNumber' component='stationNumberField'/> <field name='fishingOperationNumber' @@ -83,8 +85,33 @@ <field name='date' component='dateField'/> <field name='comment' component='commentField'/> <field name='saisisseur' component='saisisseurList'/> + <field name='gearShootingStartLatitude' component='gearShootingStartLatitudeDDField'/> + <field name='gearShootingStartLatitudeDegree' component='gearShootingStartLatitudeDMSDegreeField'/> + <field name='gearShootingStartLatitudeMinute' component='gearShootingStartLatitudeDMSMinuteField'/> + <field name='gearShootingStartLatitudeSecond' component='gearShootingStartLatitudeDMSSecondField'/> + <field name='gearShootingStartLongitude' component='gearShootingStartLongitudeDDField'/> + <field name='gearShootingStartLongitudeDegree' component='gearShootingStartLongitudeDMSDegreeField'/> + <field name='gearShootingStartLongitudeMinute' component='gearShootingStartLongitudeDMSMinuteField'/> + <field name='gearShootingStartLongitudeSecond' component='gearShootingStartLongitudeDMSSecondField'/> + <field name='gearShootingEndLatitude' component='gearShootingEndLatitudeDDField'/> + <field name='gearShootingEndLatitudeDegree' component='gearShootingEndLatitudeDMSDegreeField'/> + <field name='gearShootingEndLatitudeMinute' component='gearShootingEndLatitudeDMSMinuteField'/> + <field name='gearShootingEndLatitudeSecond' component='gearShootingEndLatitudeDMSSecondField'/> + <field name='gearShootingEndLongitude' component='gearShootingEndLongitudeDDField'/> + <field name='gearShootingEndLongitudeDegree' component='gearShootingEndLongitudeDMSDegreeField'/> + <field name='gearShootingEndLongitudeMinute' component='gearShootingEndLongitudeDMSMinuteField'/> + <field name='gearShootingEndLongitudeSecond' component='gearShootingEndLongitudeDMSSecondField'/> </BeanValidator> + <CardLayout2Ext id='gearShootingStartLongitudeLayout' + constructorParams='this, "gearShootingStartLongitudePanel"'/> + <CardLayout2Ext id='gearShootingStartLatitudeLayout' + constructorParams='this, "gearShootingStartLatitudePanel"'/> + <CardLayout2Ext id='gearShootingEndLongitudeLayout' + constructorParams='this, "gearShootingEndLongitudePanel"'/> + <CardLayout2Ext id='gearShootingEndLatitudeLayout' + constructorParams='this, "gearShootingEndLatitudePanel"'/> + <JPanel id='fishingOperationPane' constraints='BorderLayout.CENTER' layout='{new BorderLayout()}'> @@ -152,12 +179,14 @@ constraints='BorderLayout.CENTER'> <row> <cell> - <JLabel/> + <JPanel layout="{new GridLayout(1,0)}"> + <JRadioButton id='gearShootingCoordinatesDDRadio' + onActionPerformed='handler.setUseSexagecimalFormat(false)'/> + <JRadioButton id='gearShootingCoordinatesDMSRadio' + onActionPerformed='handler.setUseSexagecimalFormat(true)'/> + </JPanel> </cell> <cell> - <JLabel/> - </cell> - <cell> <JLabel id='gearLatitudeLabel'/> </cell> <cell> @@ -175,12 +204,8 @@ <cell> <JLabel id='gearShootingStartLabel'/> </cell> - <cell> - <JRadioButton id='gearShootingCoordinatesDDRadio' - onActionPerformed='handler.setUseSexagecimalFormat(false)'/> - </cell> <cell weightx='1'> - <JPanel id='gearShootingStartLatitudePanel' layout="{new CardLayout()}"> + <JPanel id='gearShootingStartLatitudePanel'> <NumberEditor id='gearShootingStartLatitudeDDField' constraints='"DD"' constructorParams='this'/> <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'> @@ -197,7 +222,7 @@ </JPanel> </cell> <cell weightx='1'> - <JPanel id='gearShootingStartLongitudePanel' layout="{new CardLayout()}"> + <JPanel id='gearShootingStartLongitudePanel'> <NumberEditor id='gearShootingStartLongitudeDDField' constraints='"DD"' constructorParams='this'/> <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'> @@ -225,12 +250,8 @@ <cell> <JLabel id='gearShootingEndLabel'/> </cell> - <cell> - <JRadioButton id='gearShootingCoordinatesDMSRadio' - onActionPerformed='handler.setUseSexagecimalFormat(true)'/> - </cell> <cell weightx='1'> - <JPanel id='gearShootingEndLatitudePanel' layout="{new CardLayout()}"> + <JPanel id='gearShootingEndLatitudePanel'> <NumberEditor id='gearShootingEndLatitudeDDField' constraints='"DD"' constructorParams='this'/> <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'> @@ -246,7 +267,7 @@ </JPanel> </cell> <cell weightx='1'> - <JPanel id='gearShootingEndLongitudePanel' layout="{new CardLayout()}"> + <JPanel id='gearShootingEndLongitudePanel'> <NumberEditor id='gearShootingEndLongitudeDDField' constraints='"DD"' constructorParams='this'/> <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-04 17:38:11 UTC (rev 153) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-07 16:38:05 UTC (rev 154) @@ -52,6 +52,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; +import jaxx.runtime.swing.CardLayout2Ext; /** @@ -152,26 +153,11 @@ boolean useSexagecimalFormat = (Boolean) evt.getNewValue(); log.info("property PROPERTY_USE_SEXAGECIMAL_FORMAT changed " + useSexagecimalFormat); - List<JPanel> panels = Lists.newArrayList( - ui.getGearShootingStartLatitudePanel(), - ui.getGearShootingStartLongitudePanel(), - ui.getGearShootingEndLatitudePanel(), - ui.getGearShootingEndLongitudePanel() - ); - - String fieldToShow; if (useSexagecimalFormat) { - fieldToShow = "DMS"; getModel().convertGearShootingCoordinatesDDToDMS(); } else { - fieldToShow = "DD"; getModel().convertGearShootingCoordinatesDMSToDD(); } - - for (JPanel panel : panels) { - CardLayout cardLayout = (CardLayout) panel.getLayout(); - cardLayout.show(panel, fieldToShow); - } } }); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-04 17:38:11 UTC (rev 153) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-07 16:38:05 UTC (rev 154) @@ -490,7 +490,7 @@ public void setGearShootingEndLongitudeSecond(Integer second) { Object oldValue = getGearShootingEndLongitudeSecond(); - gearShootingStartLongitudeAsSexagecimal.setSeconde(second); + gearShootingEndLongitudeAsSexagecimal.setSeconde(second); firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND, oldValue, second); } Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-error-validation.xml 2013-01-04 17:38:11 UTC (rev 153) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-error-validation.xml 2013-01-07 16:38:05 UTC (rev 154) @@ -34,7 +34,15 @@ </field-validator> </field> + + <field name="fishingOperationNumber"> + <field-validator type="required" short-circuit="true"> + <message>tutti.validator.error.fishingOperation.fishingOperationNumber.required</message> + </field-validator> + + </field> + <field name="date"> <field-validator type="required" short-circuit="true"> Copied: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml (from rev 153, trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-error-validation.xml) =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml (rev 0) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-warning-validation.xml 2013-01-07 16:38:05 UTC (rev 154) @@ -0,0 +1,298 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> + +<validators> + + <!--gear shooting start latitude validation --> + + <field name="gearShootingStartLatitude"> + + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:90.0|max:90.0</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat || ( -doubles.min <= gearShootingStartLatitude && gearShootingStartLatitude <= doubles.max ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingStartLatitudeDegree"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:90|max:90</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ( + ( -ints.min < getGearShootingStartLatitudeDegree() && getGearShootingStartLatitudeDegree() < ints.max ) + || ( + ( getGearShootingStartLatitudeDegree() == ints.max || getGearShootingStartLatitudeDegree() == -ints.min ) + && getGearShootingStartLatitudeMinute() == 0 && getGearShootingStartLatitudeSecond() == 0 + ) + ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingStartLatitudeMinute"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingStartLatitudeMinute() && getGearShootingStartLatitudeMinute() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingStartLatitudeSecond"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingStartLatitudeSecond() && getGearShootingStartLatitudeSecond() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <!--gear shooting start longitude validation --> + + <field name="gearShootingStartLongitude"> + + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:180.0|max:180.0</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat || ( -doubles.min <= gearShootingStartLongitude && gearShootingStartLongitude <= doubles.max ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingStartLongitudeDegree"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:180|max:180</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ( + (-ints.min < getGearShootingStartLongitudeDegree() && getGearShootingStartLongitudeDegree() < ints.max) + || ( + ( getGearShootingStartLongitudeDegree() == ints.max || getGearShootingStartLongitudeDegree() == -ints.min ) + && getGearShootingStartLongitudeMinute() == 0 && getGearShootingStartLongitudeSecond() == 0 + ) + ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingStartLongitudeMinute"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingStartLongitudeMinute() && getGearShootingStartLongitudeMinute() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingStartLongitudeSecond"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingStartLongitudeSecond() && getGearShootingStartLongitudeSecond() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <!--gear shooting end latitude validation --> + + <field name="gearShootingEndLatitude"> + + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:90.0|max:90.0</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat || ( -doubles.min <= gearShootingEndLatitude && gearShootingEndLatitude <= doubles.max ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + + <field name="gearShootingEndLatitudeDegree"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:90|max:90</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ( + (-ints.min < getGearShootingEndLatitudeDegree() && getGearShootingEndLatitudeDegree() < ints.max) + || ( + ( getGearShootingEndLatitudeDegree() == ints.max || getGearShootingEndLatitudeDegree() == -ints.min ) + && getGearShootingEndLatitudeMinute() == 0 && getGearShootingEndLatitudeSecond() == 0 + ) + ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingEndLatitudeMinute"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingEndLatitudeMinute() && getGearShootingEndLatitudeMinute() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingEndLatitudeSecond"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingEndLatitudeSecond() && getGearShootingEndLatitudeSecond() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <!--gear shooting end longitude validation --> + + <field name="gearShootingEndLongitude"> + + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:180.0|max:180.0</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat || ( -doubles.min <= gearShootingEndLongitude && gearShootingEndLongitude <= doubles.max ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingEndLongitudeDegree"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:180|max:180</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ( + (-ints.min < getGearShootingEndLongitudeDegree() && getGearShootingEndLongitudeDegree() < ints.max) + || ( + ( getGearShootingEndLongitudeDegree() == ints.max || getGearShootingEndLongitudeDegree() == -ints.min ) + && getGearShootingEndLongitudeMinute() == 0 && getGearShootingEndLongitudeSecond() == 0 + ) + ) + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingEndLongitudeMinute"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingEndLongitudeMinute() && getGearShootingEndLongitudeMinute() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + + <field name="gearShootingEndLongitudeSecond"> + + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> + <![CDATA[ + useSexagecimalFormat && ints.min <= getGearShootingEndLongitudeSecond() && getGearShootingEndLongitudeSecond() < ints.max + ]]> + </param> + + <message></message> + + </field-validator> + + </field> + +</validators> Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-04 17:38:11 UTC (rev 153) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-07 16:38:05 UTC (rev 154) @@ -273,6 +273,7 @@ tutti.validator.error.cruise.vessel.required=Au moins un bateau doit être sélectionné tutti.validator.error.cruise.year.required=L'année est obligatoire tutti.validator.error.fishingOperation.date.required=La date du fishingOperation est obligatoire +tutti.validator.error.fishingOperation.fishingOperationNumber.required=Le numéro de trait est obligatoire tutti.validator.error.fishingOperation.stationNumber.required=Le numéro de station est obligatoire tutti.validator.error.program.name.required=Le nom de la série est obligatoire tutti.validator.error.program.zone.required=La zone de la série est obligatoire Modified: trunk/tutti-ui-swing/src/main/resources/validators.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/validators.xml 2013-01-04 17:38:11 UTC (rev 153) +++ trunk/tutti-ui-swing/src/main/resources/validators.xml 2013-01-07 16:38:05 UTC (rev 154) @@ -43,5 +43,6 @@ <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="collectionUniqueKey" class="org.nuiton.validator.xwork2.field.CollectionUniqueKeyValidator"/> + <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> </validators>