JSF переместить / перенаправить на другую страницу с данными - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть страница JSP (page1.jsp) с таблицей данных. В таблице также есть кнопки:

<h:column>
    <f:facet name="header" >
        <h:outputText value=""/>
    </f:facet>
    <h:commandButton value="Show items" action="#{firstBean.displayItems}" immediate="true" />
</h:column>

Боб:

public void displayItems() throws IOException {
    MyClass theClass = (MyClass) dataTable.getRowData();
    String theId = theClass.getIdentityNumber();
    // ...
}

Когда мы нажимаем на кнопку, я хочу перейти на другую страницу JSP (page2.jsp). На странице 2 также есть таблица данных. Эта таблица создается с помощью вызова bean-компонента с именем «фасад» и параметра (String-id). Т.е. когда кнопка нажата, я хочу перейти на страницу 2 JSP, и эта страница будет отображать данные, основанные на вызове, подобном этому:

myList = facade.getDeliveriesById(theId);

Таким образом, страница 2 зависит от содержимого страницы 1, либо от строкового идентификатора, либо от того, как можно каким-либо образом установить список?

Я думаю, вопрос в следующем:

  • Должен ли я в "firstBean.displayItems" сделать перенаправление на страницу 2 jsp с параметром "get" после извлечения этого идентификатора (см. Выше)?
  • Есть ли способ настроить список, который будет использоваться на странице 2, в "firstBean.displayItems"?

Какой обычный способ перехода с одной страницы на другую в JSF (с данными)?

1 Ответ

2 голосов
/ 21 сентября 2010

В JSF 1.x обычным способом является возвращение String в качестве результата навигации.

public String displayItems() throws IOException {
    MyClass theClass = (MyClass) dataTable.getRowData();
    String theId = theClass.getIdentityNumber();
    return "page2";
}

в сочетании со следующей записью в faces-config.xml:

<navigation-rule>
    <navigation-case>
        <from-outcome>page2</from-outcome>
        <to-view-id>/page2.jsf</to-view-id>
    </navigation-case>
</navigation-rule>

Затем он перейдет к page2.jsf.

В JSF 2.x вам не нужен faces-config.xml. Просто верните точное имя файла без расширения, например, "page2" и JSF автоматически найдет правильный вид. Это называется неявная навигация .


Обновление : у вас, по-видимому, один компонент-контроллер на страницу, и вы хотите обмениваться данными между этими компонентами, не ссылаясь на другой компонент на странице. Очень разумно Это выполнимо путем разделения данных на другой управляемый bean-компонент, который должен быть введен как управляемое свойство в обоих bean-компонентах «controller».

1027 * Е.Г. *

public class ControllerBean1 {
    private DataBean dataBean;

    public String submit() {
        MyClass theClass = (MyClass) dataTable.getRowData();
        String theId = theClass.getIdentityNumber();
        dataBean.setTheId(theId);
        return "page2";
    }

    // ...
}

И

public class ControllerBean2 {
    private DataBean dataBean;

    // ...
}

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

<h:outputText value="#{controllerBean2.dataBean.theId}" />

В JSF 1.x вам нужно внедрить его с помощью <managed-property> вface-config. Вы можете найти пример в этой статье . В JSF 2.x вы можете просто аннотировать управляемое свойство, используя @ManagedProperty. В будущих вопросах, пожалуйста, укажите версию JSF, которую вы используете. Таким образом, мы можем дать более подробные подходящие ответы без шума. JSF 2.x имеет довольно много различий (улучшений) в подходах к вещам.

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