我正在尝试向grails域类添加一个方法,例如
class Item {
String name
String getReversedName() {
name.reverse()
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用grails控制台加载应用程序时,我收到以下错误:
引起:org.springframework.beans.factory.BeanCreationException:创建名为'sessionFactory'的bean时出错:init方法的调用失败; 嵌套异常是org.hibernate.PropertyNotFoundException:在类Item中找不到属性reversedName的setter ... 18更多
看起来Hibernate将getReversedName()解释为属性的getter,但是在这种情况下它是派生字段,因此不应该持久化.显然,在我的实际代码中,我所暴露的业务逻辑更为复杂,但与此问题无关.我希望能够在我的代码/ gsps中调用item.reversedName.
如何在没有Grails尝试使用Hibernate映射它的情况下,为Grails域类中的方法提供属性(getter)访问权限?
我正在使用mod_rewrite将漂亮的URL重写为Spring 2.5应用程序支持的表单.
e.g. /category/cat1?q=x => /controller?category=cat1&q=x
Run Code Online (Sandbox Code Playgroud)
但是,从我的控制器我想知道请求来自的原始URL(所以我可以生成链接,如果需要).所有页面通常都需要这种方法,因此很难进行硬编码.
如何从控制器访问原始路径+查询字符串?
我尝试使用$ 0来包含完整路径,但这不包括查询字符串.我不能只追加路径和查询字符串,因为这会导致路径的某些部分被添加为参数/category/cat1?category=cat1&q=x 注意添加不需要的&category=cat1参数,这会导致URL不再与浏览器发送的URL匹配.
我希望mod_rewrite允许我引用完整的URL并将其编码为参数,因此我的规则可能如下所示:
RewriteRule /category/(.+)
/controller?category=$1&_originalUrl=${escape:$0}?${escape:<original query string>}
[QSA]
Run Code Online (Sandbox Code Playgroud)
使用我的原始示例,最终结果传递给我的控制器将是:
/controller?category=cat1&_originalUrl=%2Fcategory%2Fcat1%3Fsearch%3Dx&search=x
Run Code Online (Sandbox Code Playgroud)
最重要的部分是的值&_originalUrl应该是%2Fcategory%2Fcat1%3Fsearch%3Dx这在其转义的版本/category/cat1?q=x(这是从浏览器发送的原始请求URL).
欢迎任何建议,提前谢谢!