2015-08-13 51 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