2012-10-30 64 views
-2

我有一個實體/ JSF Managed Bean的Ticket表示一個服務檯 票的屬性。豆類:如何正確地管理受另一個

它有一個status財產;當狀態設置爲closed我想 的closingDate屬性的值更改爲當前系統時間。 但我認爲,代碼應包含在豆類,如每次 單被關閉,應記錄時間。

什麼是管理它的正確方法?我有幾個想法。的creationTime私人

  1. 製作二傳手,並改變其值時, status setter方法被調用。快速,快速,但讓一個setter更改兩個 屬性。另外,迫使我(因爲我已經在使用它,但仍然是一個限制,不是太大的問題 的),當bean是系列化我不明白的 會發生什麼使用JPA字段訪問。
  2. 使status屬性成爲一個綁定的屬性,如JavaBean中所述, 並使該類自己成爲PropertyChangeListener。很正式,但 有點過於複雜,我的比喻。
  3. 讓這兩個屬性的制定者專用,並添加非bean的方法 close()執行兩種操作。我會這樣做,但它可以使我很難與JSF一起使用 。
  4. 什麼都不做。保持豆儘可能啞並將邏輯移至 控制器;希望沒有人忘記更新 屬性。

我贊成1)或3),但我想知道是否有更好的方法。

回答

0

我不知道是否有人可以告訴你合適的管理方法,因爲可以爲許多不同的方法提供參數,就像你製作它們一樣。要添加到列表中的)1的組合)和3,例如:

  • status更新creationTime的二傳手當status設置爲關閉,留下兩個setter方法公開。從兩方面都有好處,因爲我從JPA的角度沒有意識到這個缺點。

然而,我反對的是有一個Entity/JSF Managed Bean。我建議有兩個實體bean和一個JSF託管Bean。這樣,你的實體Bean可以保持爲,因爲它可以,而你的JSF託管Bean將有智能方法,如close()reopen()和由一系列的調用實體bean的。此外,您可以在@PreDestroy中執行諸如persist()之類的操作。易於開發,易於維護,易於做出決策。希望你會發現這有幫助。

+0

看到你的答案很長一段時間以前,但我正忙着,後來忘了,不好意思。我們的想法是找到一種執行'close()'方法的方式,就像'@ PostConstruct'一樣(但在模型被框架更新後)。正確的一點是分離JSF和JPA bean;我試圖避免/軟化它(使用JSF的包裝而不是完全不同的類),但是無法避免。使用不同的bean,將數據從JSF複製到JPA(或反之亦然)的時刻就是改變數據表示方式的時刻。 – SJuan76

相關問題