JSF - перенаправить на страницу и запомнить идентификатор параметра для поиска - PullRequest
2 голосов
/ 26 октября 2011

У меня есть две xhtml-страницы и два управляемых bean-компонента.

На первой странице у меня есть список тем (записи из таблицы базы данных - второй столбец содержит <h:commandLink> теги):

enter image description here

Часть сокращенного кода:

<rich:column><h:outputText value="#{item.id}"/></rich:column>
<rich:column><h:outputText value="#{item.createdBy}"/></rich:column>
<rich:column>
  <h:commandLink value="#{item.topic}" action="#{myTools.setMenuItem('posts')}"/>
</rich:column>

Я использую action="#{myTools.setMenuItem('posts')}" для перенаправления на страницу posts.xhtml. Как я могу передать параметр "#{item.id}", чтобы можно было найти все сообщения в теме с указанным идентификатором?

ОБНОВЛЕНИЕ (с использованием DataModel): Это может быть путь:

<h:commandLink value="#{item.topic}" action="#{myTopic.submit}">

public String submit()
{
  topic = model.getRowData();
  return "/posts.xhtml?faces-redirect=true&id=" + topic.getId();
}

Но я до сих пор не знаю, как передать параметр topic.getId() другому бину (MyPosts) ..?

Ответы [ 3 ]

4 голосов
/ 26 октября 2011

Просто передайте это.

* 1003 Е.Г. *

<h:commandLink value="#{item.topic}" action="#{myTools.navigate('posts', item.id)}"/>

с

public String navigate(String menuItem, Long id) {
    this.menuItem = menuItem;
    return menuItem + "?faces-redirect=true&id=" + id;
}

Бин не должен и не должен находиться в области видимости сеанса. Область видимости в порядке. В противном случае конечный пользователь столкнется с неинтуитивным поведением при взаимодействии с одной и той же страницей в нескольких вкладках / окнах браузера.

2 голосов
/ 26 октября 2011

Вы можете использовать:

<f:setPropertyActionListener target="#{propertyToSet}" value="#{item.id}" />

внутри вашей командной ссылки.

1 голос
/ 26 октября 2011

Вы можете добавить скрытое поле, сохранить идентификатор в этом поле перед отправкой (используйте onclick в Javascript) и связать это скрытое поле с переменной внутри Бина.

<h:inputHidden id="selectedId" value="#{beakbean.selectedId}">

<h:commandLink value="#{item.topic}" onclick="updateSelectedId()" action="#{myTools.setMenuItem('posts')}"/>

function updateSelectedId(){
    //put the selected id in the field selectedId
}
...