Grails モデルにかなり慣れていないため、データベース トランザクションにサービスを使用するのに少し問題があります。
サービス:
class ReportService {
def dataSource
def listDatatypeValues(Datatype dt) {
def sql = new Sql(dataSource)
def list = sql.rows (dt.statement)
return list
}
}
コントローラ:
def run(Long id) {
def reportInstance = Report.get(id)
def listPromptValues = populatePrompts(reportInstance)
if (!reportInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'report.label', default: 'Report'), id])
return
}
[reportInstance: reportInstance, listPromptValues: listPromptValues]
}
def populatePrompts(Report rp){
//for a prompt in the report, go out and get it's values
rp.prompts.each {
List list = reportService.listDatatypeValues(it.datatype)
}
}
スニペットを表示:
<g:if test="${reportInstance?.prompts}">
<li class="fieldcontain">
<g:each var="prompt" in="${reportInstance.prompts}">
<g:if test="${prompt.datatype.type == 'DropDown'}">
<g:select id="prompt.name" from="${listPromptValues}" name="prompt.name" value="" noSelection="['':'']"/>
</g:if>
</g:each>
</li>
</g:if>
データ型を含むプロンプトを含むレポート オブジェクトがあります。特定のレポートについて、UI に表示されると、レポートの詳細が表示され、特定のプロンプトのプロンプト値が一覧表示されます。問題は、現在のセットアップが、サービスから返された値のリストではなく、プロンプト値としてオブジェクト参照をリストしていることです。
例として、Report 1 には、Starting Term Code と Ending Term Code の 2 つのプロンプトがあります。どちらも同じ SQL クエリであるため、用語コードをデータ型として使用し、listDataTypeValues から返されるリストは、データベースに保存されている 70 以上の用語コードのリストになります。
考えや方向性はありますか?
これに従ってみましたが、うまくいきません。
ありがとう!