2015-08-13 46 views
0

切換我有一個PrimeFaces inputSwitch:PrimeFaces與初始值

<p:inputSwitch id="snoozeSwitch" value="#{dashBController.snooze}" valueChangeListener="#{dashBController.updateSnoozeStatus}"> 
    <p:ajax listener="#{dashBController.updateSnoozeStatus}" update="msgSnooze" /> 
</p:inputSwitch> 

現在我想給這個開關從我的DB的初始值。我得到的價值:

@PostConstruct 
public void init() { 
    if (!FacesContext.getCurrentInstance().isPostback()) { 
     snooze = getSnoozeStatus(); 
    } 
} 

但我有麻煩更新舊的值與新的。

public void updateSnoozeStatus() { 
    if(snooze == true) { 
    DBconnector.updateSnooze("true"); 
    } else { 
    DBconnector.updateSnooze("false"); 
    } 
} 

問題:我的應用程序將始終使用inital值等開關stucking上有原來的狀態。也許@BalusC知道答案:)

+0

凡你定義了這個方法:'updateSnoozeStatus'那是你正在呼籲聽衆的一個屬性 –

+0

我很抱歉。 updateSnooze()實際上是updateSnoozeStatus() - 在我轉移到stackoverflow時錯過了它。 – Marcel

+0

@微弱的工作可以解決這個問題? – Marcel

回答

0

除非我錯過了一些東西,你的解決方案似乎很複雜,因爲它非常簡單。你爲什麼不使用吸氣劑和吸氣劑?

getter應該從數據庫加載數值,setter應該保存它。我無法測試下面的代碼,因爲我沒有PF 5.0.4,但它應該是一個好的開始。

public class DashBController { 

    private Boolean snooze = null; 

    public boolean isSnooze() { 
    if (snooze == null) { 
     snooze = getSnoozeStatus(); 
    } 
    return snooze; 
    } 

    public void setSnooze(boolean snooze) { 
    this.snooze = snooze; 
    DBconnector.updateSnooze(this.snooze.toString()); 
    } 

} 

和簡單:

<p:inputSwitch id="snoozeSwitch" value="#{dashBController.snooze}"/> 
+0

下面的答案似乎PrimeFaces不能處理布爾類型的對象,而不是原始數據類型布爾值。這是可能的嗎?得到一些錯誤我不能擺脫... – Marcel

+0

很可能。我的回答是:現在getter和setter使用原始'boolean',你能試試嗎? – ForguesR

+0

如果我使用原語,我不能檢查是否snooze == null,所以我改變了它:'public布爾isSnooze(){ 如果(停頓== NULL){ 打盹= getSnoozeStatus(); //返回布爾或低迷現狀 } 回報snooze.booleanValue();} ' – Marcel