@ConversionErrorFieldValidator and Collections not working
----------------------------------------------------------

                 Key: WW-2112
                 URL: https://issues.apache.org/struts/browse/WW-2112
             Project: Struts 2
          Issue Type: Bug
          Components: Interceptors
    Affects Versions: 2.0.9
         Environment: WebSphere 6.1.0.9 on Windows
            Reporter: Martin Petzsch


@ConversionErrorFieldValidator does not work with property inside bean in 
collection.  Validation in the same location does work.

A data bean which a jsp uses through an action.  This bean contains a date 
field. I annotate the set method with:
        @ConversionErrorFieldValidator(message="aDate: Conversion Error")
        @RequiredFieldValidator(message="aDate: Required Field")
        public void setADate(Date date) {
                aDate = date;
        }

This works fine and I get the messages about type conversion and validation 
failure in the expected order depending on my input.

The same data bean also contains a List of another data bean and the associated 
methods:
        private List<InnerBean> innerList;
        @VisitorFieldValidator(message="Inner Message:",appendPrefix=true)
        public List<InnerBean> getInnerList() {
                if (innerList == null) {
                        innerList = new ArrayList<InnerBean>();
                        innerList.add(new InnerBean());
                }
                return innerList;
        }

        public void setInnerList(List<InnerBean> innerList) {
                this.innerList = innerList;
        }

My inner bean is as follows:
        private Date innerProp;
        public Date getInnerProp(){
                return innerProp;
        }
        
        @ConversionErrorFieldValidator(message="innerProp: Conversion Error")
        @RequiredFieldValidator(message="innerProp: Required Field")
        public void setInnerProp(Date str){
                innerProp = str;
        }

The required field validator works as expected.  I do not however get any 
result EVER back from the ConversionErrorFieldValidator on the inner bean.  If 
I enter an incorrect value it simply does not get set.

Source Code Follows
===============================================
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import 
com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.VisitorFieldValidator;

public class MyDataBean {
        private Date aDate;
        private List<InnerBean> innerList;      
        
        public MyDataBean() {
        }

        @VisitorFieldValidator(message="Inner Message",appendPrefix=false)
        public List<InnerBean> getInnerList() {
                if (innerList == null) {
                        innerList = new ArrayList<InnerBean>();
                        innerList.add(new InnerBean());
                }
                return innerList;
        }

        public void setInnerList(List<InnerBean> innerList) {
                this.innerList = innerList;
        }

        public Date getADate() {
                return aDate;
        }

        // this works fine
        @ConversionErrorFieldValidator(message="aDate: Conversion Error")
        @RequiredFieldValidator(message="aDate: Required Field")
        public void setADate(Date date) {
                aDate = date;
        }
}
--------
/**
 * 
 */
import java.util.Date;

import 
com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;

/**
 * @author MPETZSCH
 *
 */
public class InnerBean {
        private Date innerProp;
        
        public Date getInnerProp(){
                return innerProp;
        }
        
        // this does not work
        @ConversionErrorFieldValidator(message="innerProp: Conversion Error")
        @RequiredFieldValidator(message="innerProp: Required Field")
        public void setInnerProp(Date str){
                innerProp = str;
        }
}


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to