2

I have a custom UIInput wrapped in a composite component like this:

<cc:interface componentType="SingleUpload">
    <cc:attribute name="value" required="true" />
    ...
</cc:interface>

<cc:implementation>
    ...
    <p:fileUpload id="fileUpload" update="@form" auto="true" 
     fileUploadListener="#{cc.fileUploaded}" rendered="#{cc.attrs.value == null}"/>
    ...
    <h:commandButton rendered="#{cc.attrs.value != null}" action="#{cc.removeFile}">
        <p:ajax execute="@this" update="@form" />
    </h:commandButton>
    ...
</cc:implementation>

The backing component looks like this:

@FacesComponent(value = "SingleUpload")
public class SingleUpload extends UIInput implements NamingContainer, Serializable {

    /** */
    private static final long serialVersionUID = 2656683544308862007L;

    @Override
    public String getFamily() {
        return "javax.faces.NamingContainer";
    }

    public void fileUploaded(FileUploadEvent event) throws IOException {
        FileData file = new FileData();
        file.setContentMimeType(MimeTypeUtils.getContentType(event.getFile().getContentType(), event.getFile().getFileName()));
        file.setInputStream(event.getFile().getInputstream());
        file.setName(FilenameUtils.getName(event.getFile().getFileName()));
        setValue(file);
    }


    public void removeFile() {
        resetValue();
        // value should be null now, but it is not, why??
        FileData value=(FileData) getValue();

    }
}

It is used this way:

<ki:singleUpload value="#{fileModel.file}" title="File Upload" />

So when the action removeFile is called, i want to set the value to null. This works, when I follow these steps:

  1. load a page containing a singleUpload component with no initial value (fileModel.file == null)
  2. upload a file, so value in SingleUpload is not null anymore
  3. remove the file

But when I do the following

  1. load a page containing a singleUpload component with an initial value (fileModel.file != null)
  2. remove the intial value (click on button, removeFile is called)

=> removing the value from the component does not seem to be possible. Why??

4

0 回答 0