認爲你已經過了複雜的事情。總之,當你有請求的ID。對於它所需要的報價對象。
所以這裏有雲:
<!-- this is in your gsp form that will be sending to request controller -maybe possibly it shold OfferController -->
<g:hiddenField name="userRequest.id" value="${instance.id}"/>
在該控制器
def MyController {
def actionOffer(OfferBean bean) {
bean.formatBean()
if (!bean.hasErrors()) {
//do SOmething
render view:'myView', model:[instance:bean]
return
}
render view:'failedView', model:[instance:bean]
}
}
在SRC
/主/常規/包/ OfferBean.groovy
class OfferBean implements Validateable {
// this is your actual request class
UserRequestBean userRequestBean
UserRequest userRequest
static constraints = {
request(nullable:false) //, validator:checkRequest)
}
def formatBean() {
UserRequestBean userRequestBean = new UserRequestBean()
userRequestBean.formatBean(request)
}
//You actually do not need this at all.
static def checkRequest = { val, obj, errors ->
if (!Request.get(obj.request.id)) {
errors.rejectValue('message','invalid.requestId',[val] as Object[],'')
}
}
}
基本上所有你需要的是userRequest.id作爲傳遞給OfferBean的驗證類的隱藏參數,約束設置爲false,這意味着我如果userRequest.id沒有神奇地與UserRequest域類綁定,它將會失效並且落在做的某個塊之外,該塊有一個返回,告訴它一切正常並在該塊內處理。
最重要的是一旦綁定發生了沒有任何問題,你自動神奇然後可以訪問所有的請求內的bean內的actionOffer gsp
你是否明白我的意思是在比較上面的內容和你寫的內容時的複雜性?
更新了控制器以顯示如何將bean傳回以查看。在acionOffer myView gsp中,如果您現在參考,它將映射並返回請求內的某個對象。 (不需要編譯任何東西)一旦你有編號
所以在閱讀你的評論之後,你需要的是另一個bean的請求,當一個請求對象保存在bean中,就像下面的bean一樣,你已經有了bean。總之假設你
中的src/main /常規/包/ UserRequestBean.groovy
class UserRequestBean implements Validateable {
def id
String name
//mapped like your UserRequestBean domain class
//meaning it contains all elements
//Now a function to map in actual user request
//into this bean
protected def formatBean(UserRequest ur) {
this.id=ur.id
this.name=ur.name
//and so on
return this
}
}
reveiew更新的代碼,我已經添加了所謂的主類的新formatBean函數,然後綁定一個新userRequestBean那現在包含實際的userRequest域類的所有元素 - 現在可以以userRequestBean的形式訪問新窗體上的那些元素。
我仍然不認爲你需要所有這些複雜性。
你說用戶然後想要更新請求,所以原來你得到$ {instance.userRequest}整個對象,你只需用現有的值重複表單,一旦保存你就必須再次捕獲它們,所以你重新應用現有的救原始對象對這些參數Code,
無論如何我要表現出你的真實域類綁定到一個瞬時對象(非數據庫)一個更爲複雜的方式,當你快樂時,你可以
then save those values back over the main class you could introduce
def loadValues() {
Map values=[:]
//mapping all domain class objects back form bean
//required ones
values.with {
id=this.id
name=this.name
}
return values
}
然後你的object.properties=bean.loadValues()
嗯..我不太確定,如果我理解你100%。 據我所知,我只應該在商品對象中存儲對請求對象的引用,即字段請求,然後直接在商品創建視圖中顯示來自請求的列。查看我上面的修改。 – larand
我擴大了答案,它取決於你的頭腦,並採取你想要的 – Vahid
所以簡而言之,在主頁面收集請求的參數將是'$ {instance.whatever}在第二個offerRequest gsp頁面請求對象已經映射到域類。如果你需要編輯它們,OfferBean的參數是' 與每個對象,你需要小心真正的對象可以保存沒有保存。第二頁,你有第一你的ID發送 –
Vahid