2014-03-13 52 views
0

如何在數據庫中存儲用戶會話屬性以及以相同形式提供的其他信息?通過JSF保存會話屬性

<p:outputLabel value="user ID:" for="informer" /> 
<p:inputText id="informer" value="#{session.getAttribute('userID').toString()}" 
title="informer" disabled="true" /> 

只有會話屬性保存爲NULL,儘管它出現在表單字段中。其他字段保存正確。

在此先感謝。

+0

「disabled」屬性不被HTML/JSF表單提交考慮。你真的需要展示價值嗎? – mabi

+0

嗨馬比。我已經測試了enbled或disabled,並且在保存該字段後得到了相同的結果:NULL。是的,我真的需要顯示價值。謝謝。 – jMarcel

+0

瑪比,我測試了你的解決方案,它的工作原理。謝謝。但是我提出的這個問題不是我需要揭露我的具體問題的方式。我真的很感激,如果你可以看看下面(重新制定)的問題:http://stackoverflow.com/questions/22485601/storing-user-session-attributes-through-jsf-selected-item – jMarcel

回答

1

我很驚訝你的JSF實現不會拋出一個關於這個的錯誤,因爲輸入組件的value屬性需要是可寫的 - 而且由.toString()產生的字符串顯然不是。

前進的方式是將值設置爲這實際上會現場保存數據:

@Entity 
public class User { 
    private String userId; 
    //... other fields 
} 

@Named @ViewScoped 
public class UserBean implements Serializable { 
    private User myUser; 

    @PostConstruct 
    public void init() { 
     String uid = FacesContext.getCurrentInstance().getExternalContext() 
       .getSessionMap().get("userID").toString(); 
     myUser = new User(); 
     myUser.setUserId(uid); 
    } 
} 

而在你的看法:

<p:outputLabel value="user ID:" for="informer" /> 
<p:inputText id="informer" value="#{userBean.myUser.userId}" disabled="true" /> 
1

我會在這裏忽略的設計問題( mabi已經指出了這一點),我將直接回答具體問題:請參考#{sessionScope}提供的會話地圖。

<p:inputText ... value="#{sessionScope.userID}" /> 

無關到具體問題,將它打印到輸出的唯一目的,不使用:

#{session.getAttribute('userID').toString()} 

這沒有任何意義。只需參考通常的EL方式:

#{userID} 
+0

BalusC,如果你didn我沒有說過,可能我永遠不會改變我的行事方式,因爲除了我使用的可怕和荒謬之外,它還是有效的。祝福我的人是有福的。 – jMarcel