У меня есть Backing Bean, в котором я читаю параметр, который не привязан к компоненту. Шов предложил прочитать параметр get. Я использовал
@RequestParameter private String param1;
таким образом, он не пропускает мой метод действия при ошибке проверки, например, когда я использовал
Потому что я не хочу отображать HTML-ответы, а использовать бизнес-логику повторно. Вместо этого я беру поток ответов и сам пишу обработанный ответ
FacesContext ctx = FacesContext.getCurrentInstance();
final HttpServletResponse resp = (HttpServletResponse)ctx.getExternalContext().getResponse();
resp.getOutputStream().write(xml.getBytes());
resp.getOutputStream().flush();
resp.getOutputStream().close();
ctx.responseComplete(); // render response phase done
Я пытался прочитать файл из inputStream HttpServletRequest, но он уже был пустым. Есть ли способ получить «файл» из JSF? Я мог бы использовать отдельный сервлет и обработать его там, но это немного нарушило бы то, как я строил остальную часть интерфейса.
Спасибо за любой совет.
Редактировать: просто для полноты кода для входного потока
final HttpServletRequest request = (HttpServletRequest)ctx.getExternalContext().getRequest();
ServletInputStream stream = request.getInputStream();
int byt = stream.read(); // byt was -1
Редактировать Редактировать: Извините за длинный пост. Теперь я сделал отдельный сервлет. Там я также получаю пустой входной поток, хотя Firefug сказал, что я передал файл. Как это может быть пустым?
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
ServletInputStream stream= req.getInputStream();
int test = stream.read(); // test == -1
Этот код сервлета прекрасно работает в отдельном проекте, поэтому один из сервлетов JSF / Seam в цепочке фильтров должен удалить данные. Если у кого-то есть подсказка, какую или как проверить.