在我的應用程序中,許多類具有公共字段「公司」。當應用程序保存該對象時,它們必須由公司填充(對此有驗證)。公司也被保留在會議中。現在,當我想使用域類作爲命令對象時,公司必須已經被填充或者出現驗證錯誤。在驗證發生之前,是否有任何方法可以始終填寫公司字段,以便我不必每次都手動完成。 (我試過定製數據綁定,但是當有一個請求,沒有參數它不工作)Grails,使用會話中的值注入/填充域對象
2
A
回答
1
您可以設置該屬性之前的對象被保存,更新,或使用GORM eventsbeforeInsert
,beforeUpdate
或beforeValidate
驗證。
在您的域名,你需要類似的東西:
import org.springframework.web.context.request.RequestContextHolder
class Foo {
String company
...
def beforeInsert = {
try {
// add some more error checking (i.e. if there is is no request)
def session = RequestContextHolder.currentRequestAttributes().getSession()
if(session) {
this.company = session.company
}
} catch(Exception e) {
log.error e
}
}
}
1
如果你想前財產綁定的結合過程中,您可以創建自定義BindEventListener並在的Grails應用程序內註冊/的conf /春/ resources.groovy
首先,創建自定義BindEventListener
/src/groovy/SessionBinderEventListener.groovy
import org.springframework.beans.MutablePropertyValues
import org.springframework.beans.TypeConverter
class SessionBinderEventListener implements BindEVentListener {
void doBind(Object wrapper, MutablePropertyValues mpv, TypeConverter converter) {
def session = RequestContextHolder.currentRequestAttributes().getSession()
mpv.addPropertyValue("company", session.company)
}
}
所有的二,註冊您的BindEventListener
的grails-app/conf目錄/春/ resources.groovy
beans = {
sessionBinderEventListener(SessionBinderEventListener)
}
然而 ,如果您的域名類不包含公司名稱,您將獲得InvalidPropertyException。爲了克服這個問題,創建的其中含有一種叫公司財產類的列表 - 查看詳情婁
/src/groovy/SessionBinderEventListener.groovy
import org.springframework.beans.MutablePropertyValues
import org.springframework.beans.TypeConverter
class SessionBinderEventListener implements BindEVentListener {
private List<Class> allowedClasses = [Foo]
void doBind(Object wrapper, MutablePropertyValues mpv, TypeConverter converter) {
if(!(allowedClasses.contains(wrapper.class))) {
return
}
def session = RequestContextHolder.currentRequestAttributes().getSession()
mpv.addPropertyValue("company", session.company)
}
}
相關問題
- 1. 填充Grails域類
- 2. Grails無法爲控制器注入會話作用域服務
- 3. 使用對象填充組合框值 - 使用XML數據填充對象
- 4. 在登錄的springsecurity會話對象中存儲grails域變量
- 5. Spring安全註銷使會話作用域對象無效
- 6. 如何用jquery值填充jsp會話?
- 7. 在會話中存儲Grails/GORM域對象 - 爲什麼不呢?
- 8. 在會話中保留Hibernate/Grails域對象
- 9. 使用來自JSON對象的值填充輸入字段
- 10. 如何使用CakePHP中的會話值填充選擇框
- 11. 使用Angular填充對象
- 12. 使用ListView中的值在新對話框中填充EditText
- 13. Grails集成測試和會話注入
- 14. 使用來自另一個json對象的值填充json對象中的值
- 15. Unity.mvc5 - 註冊會話對象
- 16. 用於使用域對象填充控制器的zf2工廠
- 17. 用對象填充ArrayList與相同的值填充
- 18. 如何向Grails域對象注入類似服務的組件?
- 19. 使用會話變量填充BaseModel
- 20. 如何使用ninject注入會話對象屬性?
- 21. EJB3.0:使用依賴注入而不是會話對象
- 22. 在grails導航api中使用會話對象
- 23. 如何用填充了Arraylist對象的對象填充Listview
- 24. 用java填充洪水填充對象
- 25. CakePHP3:如何填充會話輸入?
- 26. 域對象被注入嗎?
- 27. 我可以使用Grails會話來存儲整個域對象嗎?
- 28. 使用ServletContext對象的會話對象
- 29. 在域對象約束中使用grails配置值
- 30. 用隨機值填充c#對象
beforeValidate - 這正是我需要的,謝謝 –