Как перенаправить из JSF Facelet, если выражение EL верно?
У меня есть JSF Facelet, который отображает резюме процесса поиска. Теперь я хочу перенаправить на страницу сведений, если поисковая система нашла только один элемент. Я не хочу реализовывать это перенаправление в моих bean-компонентах, потому что я хочу получить "знания" об этом перенаправлении из моего Java-кода.
Поэтому я хочу написать что-то вроде этого:
<ui:redirect if="#{searchResult.count eq 1}" target="details.jsf">
<f:param name="id" value="#{searchResult.firstResult.technicalId}" />
</ui:redirect>
Какие-нибудь решения или идеи для этого?
Я знаю, что в JSF 2.2 есть действия над страницами, но я использую JEE6 и есть JSF 2.0. Btw. В настоящее время я использую MyFaces, Primefaces и Richfaces.
Привет.
2 ответа
Вы должны сделать эту работу в контроллере, а не в представлении.
Чтобы получить результаты поиска, сначала нужно вызвать метод действия в форме поиска, верно? Просто сделайте работу по перенаправлению прямо там. Вы можете указать JSF отправить перенаправление, указав faces-redirect=true
в строке запроса результата действия.
public String search() {
results = service.find(query);
if (results.size() == 1) {
return "details?faces-redirect=true&id=" + results.get(0).getTechnicalId();
}
else {
return "results";
}
}
Или, если это запрос GET, который обрабатывается <f:event type="preRenderView">
затем сделайте так:
public void onPreRenderViewListener() {
results = service.find(query);
if (results.size() == 1) {
FacesContext.getCurrentInstance().getExternalContext().redirect("details.jsf?id=" + results.get(0).getTechnicalId());
}
}
Я бы сказал, что самый чистый способ - создать действие в бобе. В любом случае, я бы предложил вам смоделировать щелчок в случае, если ваш счетчик поисков равен 1 с помощью javascript.
вам нужен скрытый вход, содержащий количество:
<h:inputHidden id="count" value="#{searchResult.count}" />
и скрытая кнопка для запуска перенаправления:
<h:commandButton id="redirectButton" action="details.jsf" style="display: none;" />
затем, когда вы запускаете поиск, вы обновляете счетчик входных данных и по завершению можете проверить, равно ли значение счетчика 1, тогда вы можете нажать на кнопку commandButton.
Если вы используете Jquery, это будет что-то вроде
if($("#count").val()==1){
$("#redirectButton").click();
}