2016-03-15 4 views
0

У меня возникли некоторые проблемы с Primefaces р: компонент кэшаPrimefaces р: кэш

Это пример того, как его использовали на testpage/index.xhtml

<h:form> 
<p:panel header="Testsite"> 
    <p:cache region="testsite2" 
     key="testsite2#{user.id}#{user.defaultLanguage}"> 
     <p:commandButton action="#{testBean.hello}" value="btn" 
      rendered="#{testBean.renderedButton}">     
     </p:commandButton> 
    </p:cache> 
</p:panel> 
</h:form> 

и это задняя часть боба

@ManagedBean(name = "testBean") 
@ViewScoped 
public class TestBean { 
    @PostConstruct 
    public void init() { 
     System.out.println("init"); 
    } 
    public void hello() { 
     System.out.println("hello"); 
    } 
    public boolean isRenderedButton() { 
     System.out.println("isRenderedButton"); 
     return true; 
    } 
} 

Итак, на первой странице нажмите init и isRenderedButton сообщение напечатано нормально, как ожидалось. После этого, когда я нажимаю кнопку, я ожидаю увидеть сообщение hello, но это не случай. Может ли кто-нибудь указать мне в правильном направлении?

Согласно Primefaces showcase for p:cache с кнопками, я ожидал такого поведения.

Прямо сейчас я использую Primefaces.DEFAULT_CHACHE_PROVIDER, а позже я переключусь на ehcache.

Я использую PF 5.3, солнцезащитные очки 2.2.12.

Спасибо.

+0

Вы нашли решение – mismanc

+0

@mismanc no. У меня есть планы (через одну или две недели) снова работать над этой проблемой и, может быть, не найти ответы. Мне кажется, что этот компонент можно использовать только в том случае, если у вас есть какое-то «статическое» содержимое на странице, что-то вроде боковой панели или меню навигации, которые используются для навигации по ссылкам. Не уверен. Не стесняйтесь комментировать/отправлять ответ, если найдете что-то полезное. – jNick

+0

, если вам не нужно использовать 'p: commandButton', вы можете попробовать' h: commandButton' с ** omnifaces ** компонентом кеша, который, скорее всего, будет работать. Я должен использовать арифметический штрих-код, поэтому это не вариант для меня – mismanc

ответ

0

Чтобы ответить на вопрос (и, возможно, помочь кому-то), я пытался создать динамическое меню из базы данных, и мне захотелось кэшировать сгенерированный контент с помощью компонента p:cache. Но тогда каждый пункт меню вызывал бы метод bean, который перенаправлял пользователя на страницу, и это было проблемой на первом месте. Так что я что-то вроде этого:

<p:menu> 
    <p:submenu label="Human resource"> 
    <p:menuitem value="Search person" actionListener="#{bean.navigateUserToSearchPerson}"/> 
    </p:submenu> 

Я на самом деле не решить эту проблему (не было дополнительное время, чтобы исследовать проблему), поэтому я придумал идею для создания ссылки для каждого пункта меню, так что, когда пользователь нажимает в пункте меню он перенаправит его на новую страницу. Итак, теперь у меня нет никаких вызовов AJAX в меню, и кеширование работает отлично. Пример кода:

<p:cache region="appUiCache" key="panelMenu#{user.id}#{user.defaultLanguage}"> 
    <p:panelMenu id="sm" model="#{bean.menuModel}" stateful="true" /> 
</p:cache> 

пункты меню создаются динамически из базы данных:

DefaultMenuItem defaultMenuItem = new DefaultMenuItem(...); 
defaultMenuItem.setIcon(item.getIcon()); 
defaultMenuItem.setUrl(item.getUrl()); <!-- This is new url part --> 

Это теперь работает нормально в производстве. Благодарю.

Смежные вопросы