f: param является нулем в bean jsf - PullRequest
3 голосов
/ 19 декабря 2011

Моя проблема в том, что значение параметра в бине равно нулю

В xhtml у меня есть этот код:

<h:commandLink action="#{navigation.editNews}" value="#{new.title}">            
  <f:param name="newsId" value="#{new.id}" />      
</h:commandLink>

В Навигации я перенаправляю на news.xhtml

public String editNews(){
    return "editNews";
}

Это код в face-config.xml

<navigation-case>
  <from-action>#{navigation.editNews}</from-action>
  <from-outcome>editNews</from-outcome>
  <to-view-id>/news.xhtml</to-view-id>
  <redirect />
</navigation-case>

У меня есть bean-компонент, где я вызываю метод, когда нажимаю кнопку в файле news.xhtml, и я пытаюсь получить параметр, но он равен null

FacesContext fc = FacesContext.getCurrentInstance();
Map<String,String> params = fc.getExternalContext().getRequestParameterMap();
String = params.get("newsId"); 

1 Ответ

5 голосов
/ 19 декабря 2011

<f:param> добавляет параметр запроса. Таким образом, этот параметр имеет время жизни ровно одного HTTP-запроса. У вас есть <redirect/> в вашем случае навигации, который в основном дает указание веб-браузеру отправлять новый запрос в указанное местоположение. Этот новый запрос больше не содержит параметр.

У вас есть 2 варианта:

  1. Избавьтесь от <redirect /> в навигационном кейсе.

  2. Вместо этого сделайте обычный запрос GET. Если вы используете JSF2, используйте <h:link>.

    <h:link action="news" value="#{news.title}">            
        <f:param name="newsId" value="#{news.id}" />      
    </h:link>
    

    Или, если вы все еще пользуетесь JSF 1.x (использование случаев навигации все меньше и больше намекает на это, поскольку в JSF 2 они излишни благодаря новой неявной функции навигации; или вы должны читать устаревшие учебные пособия / книги / ответы, нацеленные на JSF 1.x, также подозрительно отсутствие тега JSF 2.0 на ваш вопрос), вместо этого используйте обычную ссылку <a>.

    <a href="news.xhtml?newsId=#{news.id}">#{news.title}</a>
    

Смотри также:

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