Действие CommandButton не вызывается при использовании Tomahawk t:inputFileUpload
Я использую JSF 2.1 с файлами JSP. Я пытался использовать JSF 2.1 с файлами Facelet, но Tomahawk (расширение MyFaces) не работал.
Я пытаюсь загрузить файл, используя Томагавк. Моя форма выглядит следующим образом:
<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 ответ
Как указано в документации Томагавк, вам необходимо зарегистрироваться ExtensionsFilter
в web.xml
, Это тот, кто отвечает за разбор multipart/form-data
запрашивает и преобразует части данных составной формы в обычные параметры и атрибуты запроса, чтобы FacesServlet
можно продолжать их использовать. Если вы не зарегистрировали ExtensionsFilter
тогда FacesServlet
не может ничего сделать, потому что нет параметров запроса для определения значений модели, которые будут обновлены, и действий, которые будут вызваны.
Смотрите также:
- Загрузка файла JSF 2.0 - мини-учебник.
Независимо от конкретной проблемы, вы должны рассмотреть использование Facelets вместо JSP. Он предлагает множество преимуществ по сравнению с JSP, таких как создание шаблонов, составные компоненты и поддержка ajax.