我有Grails Session的问题.我正在考虑为我的会话处理提供服务类.所以我创建了一个名为"SessionService"的类(在grails-app/services/grails /下).
class SessionService {
static transactional = true
GrailsWebRequest request = RequestContextHolder.currentRequestAttributes()
GrailsHttpSession session = request.session
def setTestvar(String value) {
if (session != null)
session.setAttribute("sTeststring", value)
}
def getTestvar() {
if (session != null)
session.getAttribute("sTeststring")
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我得到一个Nullpointer-Exception:" 方法抛出了'java.lang.NullPointerException'异常.无法评估org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession.ToString() ".
我的服务类的用法,例如在控制器中:
class SampleController {
SessionService sessionService
def selectAnything = {
sessionService.setTestvar("test-value")
render(view: "testview")
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?这是正确的方法吗?或者我是否必须在每种方法中设置"session = request.session"?
希望得到你的帮助.
非常感谢你提前.
干杯,
马尔科
我非常接近解决方案,但任何事情仍然是错误的,希望得到帮助,提前谢谢.
我有一个客户域模型,如:
class BoCustomer implements Serializable{
String firstName
String lastName
String emailID
Company company
}
Run Code Online (Sandbox Code Playgroud)
所以,我有一个主键="id",没关系.因此,我需要一种独特的约束来"检查"以下内容:"只有一个公司的一个唯一电子邮件地址",以便允许插入相同的电子邮件,但仅限于不同的公司.不允许插入(test@test.com,company-id:1)和插入(test@test.com,company-id:1),但插入(test@test.com,company-id:1)并插入(test@test.com,company-id:2)是允许的.
所以我到目前为止尝试过:
static mapping = {
id column: "customer_id", generator: "identity"
emailcompany composite: ['emailID', 'company'], unique: true
}
Run Code Online (Sandbox Code Playgroud)
(似乎是"好",但不完全是我想要的)
但我不想要另一个专栏,在我的名为"emailcompany"的尝试中 - 但我需要一些类似于唯一约束的东西.
我有一个问题,在GSP文件的javascript代码中使用grails变量值.
例如:我有一个会话值session.getAttribute("selectedValue"),我想在javascript代码部分中使用这个值.
我的解决方案现在(在GSP内):
<%
def js = new String("<script type=\"text/javascript\">")
js += "var jsSelectedValue = " + session.getAttribute("selectedValue") + ";"
js += "</script>"
out << js
%>
Run Code Online (Sandbox Code Playgroud)
然后我用jQuery Stuff在我的GSP里面有javascript块等等,我需要这个值.
还有另一种方法可以在纯JavaScript代码中访问grails变量吗?
第二个问题,恰恰相反.我在下拉框中选择并单击"保存",然后我想在JS-part的会话变量中存储值$("#select-box").val().
非常感谢您的帮助.
干杯,
马尔科
我有一个简单的问题,但谷歌和stackoverflow结果根本不满足我.
如何定义Constants类,如:
public class Constants {
public static final int SYSTEM_USER_ID = 1;
}
Run Code Online (Sandbox Code Playgroud)
这可以被称为处处有Constants.SYSTEM_USER_ID
我试图在grails-app/utils和src/java,但例如我不能一个服务类的内部访问.
我在Grails中发现了一些奇怪的东西.
我创建了一个对象:
User a = new User()
a.setName("test")
a.save()
Run Code Online (Sandbox Code Playgroud)
之后我调用一个方法,例如setActive,如:
a.setActive(true)
Run Code Online (Sandbox Code Playgroud)
并且不要调用save()但它保存在数据库中.我不知道为什么?!我觉得这很危险.有什么建议吗?
非常感谢,
马尔科
我只是阅读了很多并用谷歌搜索,但我现在很沮丧。
我有一个 Country 域模型
class Country{
String countryCode //maybe EN, DE, CH...
}
Run Code Online (Sandbox Code Playgroud)
现在我想在 . 我在文档(和谷歌)中读到,可以使用“id”从翻译消息属性文件中选择它。就像是:
country.code.1=America
country.code.2=England
country.code.3=Germany
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的。我想要一些类似的东西:
country.code.US=America
country.code.EN=England
country.code.DE=Germany
Run Code Online (Sandbox Code Playgroud)
所以,我从 stackoverflow 找到了一个可能的解决方案:在 Grails 中翻译一个 HTML select 元素,这对我来说意味着我必须这样说:
<g:select name="country"
from="${allCountries}"
value="${country}"
optionKey="id"
optionValue="${ {countryCode->g.message(code:'country.code.'+countryCode)} }"/>
Run Code Online (Sandbox Code Playgroud)
但我的结果在下拉列表中:“country.code.grails.Country : 1”(对于每个国家,依此类推)
如果我将 gsp-g:select 实现的最后一行更改为:
[...]optionValue="${ {countryCode->g.message(code:'country.code.US')}
Run Code Online (Sandbox Code Playgroud)
正如你看到的硬编码!这有效:-D
希望你能得到我并能帮助我,非常感谢!
grails ×6
constants ×1
foreign-keys ×1
grails-orm ×1
gsp ×1
httpsession ×1
javascript ×1
save ×1
select ×1
service ×1
session ×1
variables ×1