4 Replies Latest reply on Sep 27, 2007 7:59 AM by Bieth Bruno

    Validate fileUpload

    Bieth Bruno Newbie

      Just wondering would it be possible to validate (using the seam validation mecanism) a file.
      I would like to upload an image but the accept attribute of the fileUpload component is neglected by the browser. So I wrote an Image validator and I would like to use it with s:validate. Problem fileUpload is not a EditableValueHolder. Thus I have to manually validate it (using ClassValidator) ...


        • 1. Re: Validate fileUpload
          Pete Muir Master

          fileUpload is a EditableValueHolder in 1.3.0.ALPHA and 2.0.BETA

          • 2. Re: Validate fileUpload
            Bieth Bruno Newbie

            Cool !

            • 3. Re: Validate fileUpload
              Bieth Bruno Newbie


              fileUpload is a EditableValueHolder true and validate all attach a modelvalidator to it.
              But the file upload occur during the update model phase so the data is not validated.


              • 4. Re: Validate fileUpload
                Bieth Bruno Newbie

                I've submitted a patch for UIFileUpload.

                With this patch you can use the hibernate validator framework.
                For example I've done an Image annotation which check if a byte[] can be read by ImageIO.

                @Target({ElementType.FIELD, ElementType.METHOD})
                public @interface Image {
                 String message() default "not a valid image";

                public class ImageValidator implements Validator<Image> {
                 public void initialize(Image parameters) {
                 public boolean isValid(Object value) {
                 if( value == null ) return true;
                 if( ! (value instanceof byte[]) ) return false;
                 byte[] data = (byte[])value;
                 try {
                 BufferedImage img =
                 ImageIO.read( new ByteArrayInputStream( data ) );
                 return img == null ? false : true;
                 } catch (IOException e) {
                 return false;

                So you can use it in your Entity
                public class AnEntity {
                 private byte[] data;

                In the Facelets :
                <s:fileUpload id="uplEditedImage" value="#{image.data}"/>

                About my last post, I'm not quite right :) file upload occur during the apply request value phase but the submittedValue attribute wasn't set and the ModelValidator need a "value" attribute instead of "data".