【发布时间】:2017-05-27 08:33:54
【问题描述】:
我对 grails 完全陌生。我有两个域类,其中一个问题与答案具有一对多关系。
class Question {
String question
static hasMany = [answers: Answer]
static constraints = {
question blank: false
answers minSize: 1
}
}
和
class Answer {
String answer
static belongsTo = [question: Question]
static constraints = {
answer blank: false
}
}
控制器
@Transactional(readOnly = true)
class QuestionController {
static scaffold = Question
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
def index() {
List < Question > questionList = Question.list()[questionList: questionList]
}
def show() {
[question: Question.get(params.id).question,
answers: Question.get(params.id).answers
]
}
def create() {
respond new Question(params)
}
@Transactional
def save(Question question) {
if (question == null) {
transactionStatus.setRollbackOnly()
notFound()
return
}
if (question.hasErrors()) {
transactionStatus.setRollbackOnly()
respond question.errors, view: 'create'
return
}
question.save flush: true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.created.message', args: [message(code: 'question.label',
default: 'Question'), question.id])
redirect question
}
'*' {
respond question, [status: CREATED]
}
}
}
def edit(Question question) {
respond question
}
@Transactional
def update(Question question) {
if (question == null) {
transactionStatus.setRollbackOnly()
notFound()
return
}
if (question.hasErrors()) {
transactionStatus.setRollbackOnly()
respond question.errors, view: 'edit'
return
}
question.save flush: true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args: [message(code: 'question.label',
default: 'Question'), question.id])
redirect question
}
'*' {
respond question, [status: OK]
}
}
}
@Transactional
def delete(Question question) {
if (question == null) {
transactionStatus.setRollbackOnly()
notFound()
return
}
question.delete flush: true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.deleted.message', args: [message(code: 'question.label',
default: 'Question'), question.id])
redirect action: "index", method: "GET"
}
'*' {
render status: NO_CONTENT
}
}
}
protected void notFound() {
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'question.label',
default: 'Question'), params.id])
redirect action: "index", method: "GET"
}
'*' {
render status: NOT_FOUND
}
}
}
}
现在,如果我想创建一个问题,答案会显示为 /answer/create.gsp 的链接,如下图
我正在寻找的是答案在 question/create.gsp 上显示为文本字段
/question/create.gsp 的形式:
<g:form action="save">
<fieldset class="form">
<f:all bean="question"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>
我认为我的表单必须有另一种解决方案,但我不知道。
提前致谢!
【问题讨论】:
标签: grails