2017-02-22 42 views
0

Когда я собираюсь перейти на другую страницу, я хотел бы поместить объект во флеш. Вот как я это делаю в данный момент:Доступ к флеш-памяти с h: link в JSF

<h:commandLink action="#{bean.foo(object)}"> 
    <h:graphicsImage .../> 
</h:commandLink> 

и метод фасоли:

public String foo(Object o) { 
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put("key", o); 
    return "target.xhtml?faces-redirect=true"; 
} 

Я хотел бы сделать это с ч: ссылку в XHTML без метода фасоли (также потому что я слышал, что навигация по CommandLink плохая). У меня есть что-то вроде этого в виду, чтобы заменить выше код:

<h:link outcome="target.xhtml"> 
    <h:graphicsImage .../> 
    <someTag someAttr="#{facesContext.externalContext.flash.put("key", object)}"/> 
</h:link> 

Есть такой тег (someTag), который может быть использован, как это?

ответ

2

Вы не можете передавать атрибуты вспышки, такие как атрибуты GET, с помощью h:link. ViewParams недостаточно? Это лучший способ навигации.

Но вы можете поместить переменные в область флэш-памяти с помощью c:set. Проблема в том, что если вы хотите установить значение динамически после нажатия ссылки.

Добавить пространство имен, если не присутствует xmlns:c="http://java.sun.com/jsp/jstl/core"

<c:set target="#{flash}" property="key" value="object"/> 
<h:link outcome="target.xhtml"> 
    <h:graphicsImage .../> 
</h:link> 
+0

Что с: установить, что выглядит многообещающим. Не могу ли я просто поместить это в ссылку h:, чтобы он был выполнен, когда я нажимаю ссылку? – user1785730

+0

Вы можете, но он запускается при загрузке страницы, а не после нажатия ссылки. – jklee