关于实现添加相关图书功能的一些问题

1.参考Grails实现复杂的数据录入,实现了为图书添加相关图书的功能,但是在随后的测试中

发现了一些问题,现将这些问题列举出来,

(1)当进入新建页面的时候,什么数据也不填,点击保存按钮,如果你在domain类中添加了约

束条件,如果按照正常的情况是应该在页面上显示报错信息。但是此时页面没有报错,但是数

据也没录入,该怎样解决这个问题了。

例如当保存不成功时我们返回到添加页面,如果你的代码类似这样的话

render(view:"create")或者redirect(action:"create")这时就会出现上面的问题。

解决办法,我们在controller中判断保存是否成功的逻辑中假如如下代码:

将代码修改成为

render(view: "newedit", model: [bookInstance: book])

注意红字部分,保存代码,运行程序,重复上边的步骤。这时会在页面上显示报错信息。

image

(2)如果我们进入编辑页面的话,此时你会发现页面没数据。这问题可以这样解决,原代码如

下:

def edit={ 
book=Book.get(params.id) 
}

我们将其修改如下:

def edit = { 
def bookInstance 
if(params.id){//如果有参数,则表明是要进入编辑页面

bookInstance = Book.get(params.id)

}else{//没有参数,则表示新建 
bookInstance = new Book()

bookInstance.properties = params


return [bookInstance: bookInstance]//得返回这个,否则在编辑页面没值 
}

注意红字部分。

ok,保存代码,运行程序,再次进入编辑页面就会出现数据了。

(3)如果我们浏览某本书的详细页面,相关图书那里会有一些问题,出现的数据会有中括号包起

来,如下图所示:

image

解决方法如下:我们可以写一个循环把它的值取出然后显示出来,正好grails给我们提供了

<g:each>标签,示例如下:

<g:each in="${bookInstance?.relativeBooks}" var="relativeBooks">

<li>${relativeBooks.cName}</li>

</g:each>

ok,保存代码,运行程序,效果如下,当然你可以给给它的显示样式做下改变,这就涉及到

CSS了,这里就不做讨论了。

image

ps:这是最近遇见的一个问题,在测试页面时发现,当我编辑一个图书时,我将该图书的相关

图书删除一些后,然后点击保存,然后再查看该图书的详细信息时发现,该图书的相关图书没

有改变,还是原来的那些,如果我在编辑时,删除一些相关图书,然后再添加一些的话,再查

看详细图书时,发现相关图书会出现混乱,一本书可能出现两次,通过在控制台打印信息发

现,该图书的相关图书,Book.relativeBooks,例如你新建的一本书的相关图书有3本,那么

这个Book.relativeBooks的长度为3,这个长度只能增加,不会再减少。仔细检查代码,最终

找到了解决方法。

def edit = { 
def bookInstance 
if(params.id){//如果有参数,则表明是要进入编辑页面

bookInstance = Book.get(params.id)

}else{//没有参数,则表示新建 
bookInstance = new Book()

book.relativeBooks = null//将其相关图书清空

bookInstance.properties = params


return [bookInstance: bookInstance]//得返回这个,否则在编辑页面没值 
}

在原action中加入红色字体的代码,现将相关图书清空,然后再利用properties属性,为

book赋值。

ok再次测试程序,这次程序没有问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
收藏夹和购物车系统的实现  收藏夹子系统 (1) 【收藏指定图书】能收藏一本图书,并记录收藏日期(某年某月某日,如2016-12-12。所有日期都采用人工定义方式输入,不取机器日期)。图书的信息包括图书号(是唯一的)、书名、作者、出版社、出版日期、价格。 (2) 【查询指定图书】能按照图书号查询显示收藏夹中图书相关信息(也可以扩展功能为按照书名、作者、出版社、出版日期、指定价格大小范围查询显示收藏夹中图书相关信息)。 (3) 【按日期显示所有图书】能按照收藏日期的先后显示输出所收藏的所有图书相关信息。 (4) 【移出收藏夹】可以把不想收藏的某一本指定图书号的图书直接移出收藏夹。 (5) 【加入购物车】将收藏夹中的某一本指定图书号的图书加入到购物车。 (6) 【按价格显示所有图书】能按照价格的大小显示输出收藏夹中的所有图书相关信息。  购物车子系统 (1) 【直接加入购物车】把准备购买的一本图书直接加入购物车,同时记录加入购物车的日期。图书的信息包括图书号(是唯一的)、书名、作者、出版社、出版日期、价格、购买数量、购买金额(自动计算)。 (2) 【查询指定图书】能按照图书号查询显示购物车中准备购买的图书相关信息(也可以扩展功能为按照书名、作者、出版社、出版日期、指定价格大小范围查询显示购物车中图书相关信息)。 (3) 【修改购买数量】可以修改购物车中准备购买的某一本指定图书号的图书的数量,同时自动计算修改购买金额(购买金额=购买数量*价格)。 (4) 【删除指定图书并移到收藏夹】把购物车中的某一本指定图书号的图书删除并移到收藏夹。 (5) 【直接删除指定图书】可以把不想购买的某一本指定图书号的图书从购物车中删除。 (6) 【按图书号显示所有图书】把购物车中所有图书按照图书号列出每一本图书图书号、书名、作者、出版社、出版日期、价格、购买数量、购买金额,最后列出总共有多少本图书、总金额是多少。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值