Давайте использовать страницу поиска и страницу результатов, например. Если у меня есть bean-компонент ViewScoped, который обрабатывает мою страницу поиска и страницу результатов, я могу передавать параметры через URL-адрес, используя что-то вроде этого:
search.xhtml
<p:commandButton value="Search" type="submit" action="#{searchBacker.search}" >
поддерживающая фасоль
@ManagedBean(name="search")
@ViewScoped
public class searchBacker extends AbstractBacking {
private String firstName = null;
private String lastName = null;
private String results = null;
public String search() {
return "results?faces-redirect=true&includeViewParams=true";
}
public void getResults() {
MyDAO dao = new MyDAO();
results = dao.getResults(firstName, lastName);
}
//getters and setters
}
результаты.xhtml
<f:metadata>
<f:event type="preRenderView" listener="#{searchBacker.getResults}" />
<f:viewParam name="firstName" value="#{searchBacker.firstName}"/>
<f:viewParam name="lastName" value="#{searchBacker.lastName}"/>
</f:metadata>
Теперь предположим, что у меня есть два управляемых компонента: один для страницы поиска и один для страницы результатов.
Будет ли строка запроса по-прежнему встроена в URL-адрес с двумя разными управляемыми компонентами или это работает только при использовании одного и того же управляемого компонента для обеих страниц?
ОБНОВЛЕНИЕ
У меня одинаковые <f:viewParam>
на страницах search.xhtml и results.xhtml, но единственная разница в том, что мой f:viewParam value
указывает на другого покровителя в моем results.xhtml, чем в search.xhtml. Когда я это делаю, никакие параметры не передаются через URL-адрес. Когда я указываю свой f:viewParam value
в results.xhtml на тот же бэкер, который я использую в search.xhtml, параметр прекрасно передается через URL-адрес, но значение не существует в бэкере результатов, где мне это нужно. Если у меня есть дублирующиеся f:viewParam
s на моей странице results.xhtml - один со сторонником поиска и один со сторонником результатов, все работает нормально. Является ли наличие 2 одинаковых f:viewParam
s с обоими управляемыми bean-компонентами правильным способом сделать это?
Примеры:
results.xhtml - параметры передаются через URL, но недоступны в моем resultsBacker
<f:metadata>
<f:viewParam name="firstName" value="#{searchBacker.firstName}"/>
<f:viewParam name="lastName" value="#{searchBacker.lastName}"/>
</f:metadata>
results.xhtml - никакие параметры не передаются через URL-адрес
<f:metadata>
<f:viewParam name="firstName" value="#{resultsBacker.firstName}"/>
<f:viewParam name="lastName" value="#{resultsBacker.lastName}"/>
</f:metadata>
results.xhtml - параметры передаются через URL-адрес и доступны в моем resultsBacker, но кажутся неуклюжими. Это правильный способ сделать это или я все еще что-то упускаю?
<f:metadata>
<f:viewParam name="firstName" value="#{searchBacker.firstName}"/>
<f:viewParam name="firstName" value="#{resultsBacker.firstName}"/>
<f:viewParam name="lastName" value="#{searchBacker.lastName}"/>
<f:viewParam name="lastName" value="#{resultsBacker.lastName}"/>
</f:metadata>
includeViewParams=true
не сработало? - person BalusC   schedule 04.08.2013includeViewParams=true
с моимf:viewParam value
, используя тот же компонент поддержки, что и моя страница поиска, все в порядке, но когда я изменил значение на новый компонент поддержки, параметры не отображаются в URL-адресе. - person Catfish   schedule 04.08.2013