1.参考Grails实现复杂的数据录入,实现了为图书添加相关图书的功能,但是在随后的测试中 发现了一些问题,现将这些问题列举出来, (1)当进入新建页面的时候,什么数据也不填,点击保存按钮,如果你在domain类中添加了约 束条件,如果按照正常的情况是应该在页面上显示报错信息。但是此时页面没有报错,但是数 据也没录入,该怎样解决这个问题了。 例如当保存不成功时我们返回到添加页面,如果你的代码类似这样的话 render(view:"create")或者redirect(action:"create")这时就会出现上面的问题。 解决办法,我们在controller中判断保存是否成功的逻辑中假如如下代码: 将代码修改成为 render(view: "newedit",?model: [bookInstance: book]) 注意红字部分,保存代码,运行程序,重复上边的步骤。这时会在页面上显示报错信息。 (2)如果我们进入编辑页面的话,此时你会发现页面没数据。这问题可以这样解决,原代码如 下: def edit={? 我们将其修改如下: def edit = {? bookInstance = Book.get(params.id) }else{//没有参数,则表示新建? bookInstance.properties = params }? 注意红字部分。 ok,保存代码,运行程序,再次进入编辑页面就会出现数据了。 (3)如果我们浏览某本书的详细页面,相关图书那里会有一些问题,出现的数据会有中括号包起 来,如下图所示: 解决方法如下:我们可以写一个循环把它的值取出然后显示出来,正好grails给我们提供了 <g:each>标签,示例如下: <g:each in="${bookInstance?.relativeBooks}" var="relativeBooks"> <li>${relativeBooks.cName}</li> </g:each> ok,保存代码,运行程序,效果如下,当然你可以给给它的显示样式做下改变,这就涉及到 CSS了,这里就不做讨论了。 ps:这是最近遇见的一个问题,在测试页面时发现,当我编辑一个图书时,我将该图书的相关 图书删除一些后,然后点击保存,然后再查看该图书的详细信息时发现,该图书的相关图书没 有改变,还是原来的那些,如果我在编辑时,删除一些相关图书,然后再添加一些的话,再查 看详细图书时,发现相关图书会出现混乱,一本书可能出现两次,通过在控制台打印信息发 现,该图书的相关图书,Book.relativeBooks,例如你新建的一本书的相关图书有3本,那么 这个Book.relativeBooks的长度为3,这个长度只能增加,不会再减少。仔细检查代码,最终 找到了解决方法。 def edit = {? bookInstance = Book.get(params.id) }else{//没有参数,则表示新建? book.relativeBooks = null//将其相关图书清空 bookInstance.properties = params }? 在原action中加入红色字体的代码,现将相关图书清空,然后再利用properties属性,为 book赋值。 ok再次测试程序,这次程序没有问题了。
book=Book.get(params.id)?
}
def bookInstance?
if(params.id){//如果有参数,则表明是要进入编辑页面
bookInstance = new Book()
return [bookInstance: bookInstance]//得返回这个,否则在编辑页面没值?
}
def bookInstance?
if(params.id){//如果有参数,则表明是要进入编辑页面
bookInstance = new Book()
return [bookInstance: bookInstance]//得返回这个,否则在编辑页面没值?
}
详细解决方案
关于实现添加相关图书功能的一些有关问题
热度:204 发布时间:2012-10-24 14:15:58.0
相关解决方案