Действие CommandButton не вызывается при использовании Tomahawk t: inputFileUpload - PullRequest
1 голос
/ 27 октября 2011

Я использую JSF 2.1 с файлами JSP.Я пытался использовать JSF 2.1 с файлами Facelet, но Tomahawk (расширение MyFaces) не работал.

Я пытаюсь загрузить файл с помощью Tomahawk.Моя форма выглядит следующим образом:

<f:view>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>FILE UPLOAD</title>
    </head>
    <body>
        <fieldset>
            <h:form enctype="multipart/form-data">
                <t:inputFileUpload value="#{fileUploadBean.upFile}"
                                   size="25"
                                   required="true" /><br/>
                <h:commandButton value="Validar" action="#{fileUploadBean.upload}" />
            </h:form>
        </fieldset>
    </body>
</html>
</f:view>

и мой бин (поскольку я использую JSF 2.1, мне не нужно использовать faces-config.xml и я использую аннотации):

import java.io.IOException;
import java.io.InputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.apache.myfaces.custom.fileupload.UploadedFile;

/**
 *
 * @author federico.martinez
 */
@ManagedBean
@RequestScoped
public class FileUploadBean {

    private UploadedFile upFile;

    public UploadedFile getUpFile(){
        return upFile;
    }

    public void setUpFile(UploadedFile upFile){
        this.upFile = upFile;
    }

    public String upload(){
        InputStream is = null;
        try {
            is = upFile.getInputStream();
            long size = upFile.getSize();
            byte[] buffer = new byte[(int)size];
            is.read(buffer,0,(int)size);
            is.close();
            System.out.println("File Upload Successful.");
            return "processing-file";
        } catch (IOException ex) {
            Logger.getLogger(FileUploadBean.class.getName()).log(Level.SEVERE, null, ex);
            return "error-lf";
        } finally {
            try {
                is.close();
            } catch (IOException ex) {
                Logger.getLogger(FileUploadBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }  
}

Ну вот и все, но, наконец, проблема в том, что когда я нажимаю h: commandButton, он ничего не делает.Кажется, что метод «загрузить» из моего бина не работает или что-то в этом роде.что мне не хватает?

1 Ответ

0 голосов
/ 27 октября 2011

Как указано в документации Томагавк , вам необходимо зарегистрироваться ExtensionsFilter в web.xml.Именно он отвечает за синтаксический анализ multipart/form-data запросов и преобразование частей данных составной формы в обычные параметры и атрибуты запроса, чтобы FacesServlet мог продолжать их использовать.Если вы не зарегистрируете ExtensionsFilter, то FacesServlet не сможет ничего сделать, потому что нет параметров запроса для определения значений модели, которые будут обновлены, и действий, которые будут вызваны.

См.также:


Не связано с конкретной проблемой,Вы действительно должны рассмотреть использование Facelets вместо JSP.Он предлагает множество преимуществ перед JSP, таких как шаблонные , составные компоненты и поддержка ajax .

...