bean-объект видимости не сохраняет параметр сеанса - PullRequest
1 голос
/ 15 марта 2012

У меня есть страница с данными с информацией о продукте, с которой при действии выбора продукта я перенаправляю на страницу с информацией о продукте, передавая параметр:

configurableNavigationHandler.performNavigation("productInfo?faces-redirect=true&prId=" + selectedCpl.getP().getPrId());

В моем bean-объекте видимости в моем методе init я получаю запросПараметр и заполните необходимые объекты:

@ManagedBean
@ViewScoped
public class ProductInfo implements Serializable {

private Product p;
private Integer prId;

@PostConstruct
private void init() {
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    if (request.getParameter("prId") != null) {
        prId = Integer.parseInt(request.getParameter("prId"));
        p = pf.find(prId);

В моем productInfo.xhtml у меня есть представление информации о продукте и диалоговое окно для редактирования информации о продукте, но когда я нажимаю "отправить", мой параметр запроса имеет значение null:

<p:commandButton styleClass="button-edit" value="Submit" actionListener="#{productInfo.saveProduct()}" update="prodInfo" oncomplete="dlg.hide();"/>  

Я использую jsf 2.0 с элементами primefaces.

Кто-нибудь может мне помочь?Спасибо.

1 Ответ

1 голос
/ 15 марта 2012

Это не параметр сеанса.Это параметр запроса .Это null потому что вы не отправляете его вместе с запросом на отправку.Отправьте его по <f:param>.

<p:commandButton ...>
    <f:param name="prId" value="#{productInfo.prId}" />
</p:commandButton>

Не связано с конкретной проблемой, есть несколько других потенциальных проблем.Во-первых, bean-объект области видимости должен быть воссоздан , а не при отправке формы.Возможно, вы используете обработчики тегов в представлении.Во-вторых, вам следует полностью избегать перетаскивания необработанного javax.servlet API из-под обложек JSF.Вместо этого используйте ExternalContext#getRequestParameterMap().В-третьих, <f:viewParam> намного чище, чем этот постконструктив.В-четвертых, перенаправление с помощью обработчика навигации пахнет проблемой проектирования в представлении, например, почему бы не использовать только ссылку GET?

Подробные объяснения по всем этим вопросам доступны в Связь в JSF2,0 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...