小编gra*_*s0r的帖子

Grails在Service类中获得Session和Management

我有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"?

希望得到你的帮助.

非常感谢你提前.

干杯,

马尔科

service session grails nullpointerexception httpsession

15
推荐指数
3
解决办法
2万
查看次数

grails复合"独特约束",但如何?

我非常接近解决方案,但任何事情仍然是错误的,希望得到帮助,提前谢谢.

我有一个客户域模型,如:

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"的尝试中 - 但我需要一些类似于唯一约束的东西.

grails foreign-keys composite-key grails-orm

8
推荐指数
2
解决办法
7542
查看次数

Grails在javascript中使用GSP站点中的grails var

我有一个问题,在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().

非常感谢您的帮助.

干杯,

马尔科

javascript variables grails gsp

6
推荐指数
1
解决办法
1万
查看次数

在我的Grails应用程序中可以访问哪些Constants类?

我有一个简单的问题,但谷歌和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/utilssrc/java,但例如我不能一个服务类的内部访问.

grails constants

4
推荐指数
2
解决办法
2436
查看次数

grails插入到DB而不保存,为什么?

我在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()但它保存在数据库中.我不知道为什么?!我觉得这很危险.有什么建议吗?

非常感谢,

马尔科

grails save

1
推荐指数
1
解决办法
2095
查看次数

grails g: 选择 i18n

我只是阅读了很多并用谷歌搜索,但我现在很沮丧。

我有一个 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 select internationalization

1
推荐指数
1
解决办法
3348
查看次数