如何在Groovy控制器中从另一个Controller获取记录?
解决方案
方法1:跳转时显式传递CaseRecord ID参数
在CaseRecordController对应的show页面中,跳转至BaseLineController的链接里额外携带caseRecordId参数,示例链接代码:
<a href="${createLink(controller: 'baseLine', action: 'show', params: [id: baselineId, caseRecordId: caseRecordInstance.id])}">查看基线</a>
修改BaseLineController的show方法,通过params.caseRecordId获取CaseRecord的ID:
def show() { def baselineInstance def caseRecordInstance if(params.id) baselineInstance = Baseline.findById(Long.parseLong(params.id)) try { def caseRecordId = Long.parseLong(params.caseRecordId) caseRecordInstance = CaseRecord.findById(caseRecordId) } catch (NumberFormatException e) { // 处理参数格式错误的情况 } }
方法2:通过Session临时存储CaseRecord ID
在CaseRecordController的show方法中,将获取到的CaseRecord ID存入Session:
def show() { def caseRecordInstance try { def id = Long.parseLong(params.id) caseRecordInstance = CaseRecord.findById(id) session.caseRecordId = id // 把ID存入Session } catch (NumberFormatException e) { // 异常处理逻辑 } }
在BaseLineController的show方法中,从Session中读取CaseRecord ID:
def show() { def baselineInstance def caseRecordInstance if(params.id) baselineInstance = Baseline.findById(Long.parseLong(params.id)) try { def caseRecordId = session.caseRecordId if(caseRecordId) { caseRecordInstance = CaseRecord.findById(caseRecordId) } } catch (Exception e) { // 异常处理逻辑 } }
方法3:利用模型关联关系(推荐)
如果Baseline和CaseRecord存在关联关系(比如一个CaseRecord对应多个Baseline),可以在Baseline模型类中定义关联:
class Baseline { // 其他字段 static belongsTo = [caseRecord: CaseRecord] }
之后在BaseLineController的show方法中,直接通过Baseline实例获取关联的CaseRecord:
def show() { def baselineInstance def caseRecordInstance if(params.id) { baselineInstance = Baseline.findById(Long.parseLong(params.id)) if(baselineInstance) { caseRecordInstance = baselineInstance.caseRecord // 直接通过关联获取 } } }
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

