2015-02-10 66 views
0

JSF 2允許使用<f:viewParam>標籤初始化URL參數。根據URL參數啓用禁用命令按鈕

例如:

<f:viewParam id="name" name="name" 
      value="#{applicationBean.name}" required="true" /> 

,然後使用該參數在輔助bean使用<f:event>加載某些對象。

例如:

<f:event type="preRenderView" 
      listener="#{applicationBean.preRenderView}" /> 

preRenderView()該方法在applicationBean集的一些布爾變量buttonEnabled爲真\假

當主頁使用該變量,以使\禁用按鈕它不工作(例如,它總是評估爲false):

<h:commandButton disabled="#{!applicationBean.buttonEnabled}"> 

有什麼建議嗎?

+1

鑑於你正在調用一個bean方法,它不是也是一個bean中的變量嗎? '#{applicationBean.buttonEnabled}' – Makhiel 2015-02-10 12:33:54

+0

我已經在使用這個bean變量。我編輯了這篇文章。 – 2015-02-10 12:41:50

回答

1

存在計時問題。操作事件在應用請求值階段中排隊。它將作爲防範篡改請求的一部分,同時評估當時的disabled(和rendered)屬性。但是,因爲它只是在渲染響應階段之前才真正設置,所以它確實總是會評估爲其默認值,這顯然是false

您需要可以執行的@PostConstruct,而不是請求參數基於初始化作業(<f:viewParam>是那麼確實insuitable),或讓disabled屬性檢查請求的參數本身,而不是一個bean的屬性(bean屬性然後確實不合適)。