gpt4 book ai didi

data-binding - 从 URL 到映射属性的 Grails 数据绑定(bind)。自定义数据绑定(bind)器永远不会被调用

转载 作者:行者123 更新时间:2023-12-02 14:14:00 25 4
gpt4 key购买 nike

我正在开发一个简单的购物车应用程序,该应用程序需要能够在 URL 中传递特定产品的数量。我想通过在命令对象上使用 map 属性来保持数据绑定(bind)简单。但是,当我使用希望放入 map 的参数来执行操作时,我收到以下错误:

ERROR errors.GrailsExceptionResolver  - Exception occurred when processing request: [GET] /mygrailsapp/action
itemQty[123].id: 5
java.lang.NullPointerException
at grails.plugin.springcache.web.GrailsFragmentCachingFilter.doFilter(GrailsFragmentCachingFilter.groovy:66)
at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
at com.infusionsoft.cam.security.filter.BlackListIpAddressFilter.doFilter(BlackListIpAddressFilter.java:78)
at java.lang.Thread.run(Thread.java:662)

命令对象如下所示:
class MyCommand {
Map itemQty

static constraints = {
itemQty(nullable: true, blank: true)
}
}

Controller Action 如下所示:
def action = {MyCommand myCommand ->
// some code
}

我点击的示例网址是 /mygrailsapp/action?itemQty[123]=5

我正在按照 Grails Docs 中的示例将数据绑定(bind)到 map ,唯一的区别是我尝试从 URL 中执行此操作,而不是从文档中的帖子中执行此操作。我正在使用 Grails 1.3.7。我已经尝试编码括号 - [ 和 ] - 但我得到了同样的错误。

任何帮助,将不胜感激。谢谢!

编辑 :我发现这是因为 spring 期望 map 在设置值之前在其中包含键,并且不会插入新条目。

我现在正在尝试使用自定义活页夹来填充 map ,但永远不会调用属性编辑器类方法。

这是我的属性编辑器(我调用 super 只是为了验证控制是否进入了该方法):
class ItemQuantityPropertyEditor extends PropertyEditorSupport {

@Override
public void setValue(Object value) {
super.setValue(value)
}

@Override
void setAsText(String text) {
super.setAsText(text)
}

@Override
Object getValue() {
return super.getValue()
}

@Override
String getAsText() {
return super.getAsText()
}

}

这是注册商:
class ItemQuantityPropertyEditorRegistrar implements PropertyEditorRegistrar {

void registerCustomEditors(PropertyEditorRegistry propertyEditorRegistry) {
propertyEditorRegistry.registerCustomEditor(MyCommand, "itemQty", new ItemQuantityPropertyEditor())
}
}

这是我在 resources.groovy 中的条目:
beans = {
itemQuantityPropertyEditorRegistrar(ItemQuantityPropertyEditorRegistrar)
}

最佳答案

尝试使用公共(public)集合惰性映射初始化映射:

import org.apache.commons.collections.MapUtils
import org.apache.commons.collections.FactoryUtils

class MyCommand {
Map itemQty = MapUtils.lazyMap([:], FactoryUtils.constantFactory(''))

static constraints = {
itemQty(nullable: true, blank: true)
}
}

你不应该需要自定义绑定(bind) PropertyEditor 的东西......

关于data-binding - 从 URL 到映射属性的 Grails 数据绑定(bind)。自定义数据绑定(bind)器永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com