Странная проблема при генерации PDF онлайн

Ваша конкретная проблема вызвана тем, что JSF отправляет по умолчанию текущий URL-адрес запроса без какой-либо строки запроса. Посмотрите ближе на сгенерированный вывод HTML, вы увидите

. Таким образом, вам явно нужно будет включать эти параметры запроса самостоятельно. Существует несколько способов решить эту проблему. Если вы не отправляли перенаправление, вы можете просто добавить их в виде скрытых входов в форму JSF.


    
    
    ...

Только эти параметры не появятся в URL-адресе в адресной строке браузера. Это не проблема, если вы используете только использование ajax на той же странице. , кстати, не подходит, поскольку он смутно потеряет свое значение, когда в форме появляется ошибка преобразования или проверки.

Чтобы заставить их снова появиться в URL-адресе, вам нужно и includeViewParams. Чтобы работать includeViewParams, вам нужно объявить следующее как на исходной странице agreement.xhtml ...


    
    

... и целевой странице generated.xhtml:


    
    

Теперь вы можете отправить перенаправление, включая параметры представления, следующим образом:

public String generateMethod() {
    // ...

    return "generated?faces-redirect=true&includeViewParams=true";
}

Обратите внимание, что bean должен быть @ViewScoped, чтобы поддерживать эти параметры между открытием страницу с формой и отправкой формы, а также ошибок проверки. В противном случае, если вы придерживаетесь компонента @RequestScoped, вы должны сохранить их как в компонентах команды:


    
    

Невозможно установить их для внутренних компонентов ввода, ваш bean должен быть действительно @ViewScoped.


В качестве альтернативы, если вы уже используете библиотеку утилиты JSF OmniFaces , то вы также можете просто заменить на следующим образом (см. также пример демонстрации ):


Это в основном все. Это приведет к генерации с включенной текущей строкой запроса.


Эти параметры запроса затем доступны только на карте параметров запроса формы submit. Вам не нужны дополнительные метаданные / viewparams, и вам также не нужно отправлять перенаправление, и ваш bean-компонент может быть сохранен @RequestScoped, если это необходимо.

public String generateMethod() {
    // ...

    return "generated";
}

Или, если вы используете библиотеку «симпатичного URL», такую ​​как PrettyFaces или FacesViews или, возможно, что-то домашнее, и намерены отправить точно так же, как и в адресной строке браузера, тогда вы можете использовать useRequestURI.


См. также:

0
задан maxileft 17 January 2019 в 02:01
поделиться