小编Tom*_*ant的帖子

如何在生产中处理Play Framework 2数据库演变

似乎每当我更改模型时,Play Framework都会要求我运行一个删除整个模式并重新创建它的脚本.显然这不适合生产,那么在生产中处理这个问题的正确方法是什么?

注意,我正在使用ebean和Postgres,并在heroku上托管.

java postgresql playframework playframework-2.0 playframework-evolutions

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

如何告诉Play Framework 2和Ebean保存空字段?

我正在使用Play Framework 2和Ebean.当用户提交表单以编辑数据库中的现有对象时,它不会保存空值.我想这是为了防止覆盖不在表单中的字段为null.但是,如果他们需要,我如何让他们将表单中的字段设置为null?

例如,用户编辑Event对象. Event.date是1/1/13.用户将Event.date表单中的字段设置为空并提交表单.Event.date在调试器中检查显示其值为null.我救了Event.如果我查看Event数据库中的数据,它的值仍然是1/1/13.

编辑:似乎有一种方法.唯一的问题是它不适用于嵌套实体.对此有何解决方案?

update(Object bean,Set<String> properties)
Run Code Online (Sandbox Code Playgroud)

forms save playframework ebean playframework-2.0

12
推荐指数
2
解决办法
2587
查看次数

为什么contextInitialized()被多次调用?

我正在Jboss 4.2.3.GA上运行Stripes Web应用程序,并且在我启动JBoss时尝试调用方法.我创建了一个ServletContextListener,如下所示:

public class TimerContextListener implements ServletContextListener {

    @Inject
    private TimerManager timerManager;

    public void contextInitialized(ServletContextEvent servletcontextevent) {
        ((Injector) servletcontextevent.getServletContext().getAttribute(GuiceServletContextListener.KEY)).injectMembers(this);
        timerManager.stopAllTimers();
        timerManager.startTimer();
    }

    public void contextDestroyed(ServletContextEvent servletcontextevent) {

    }
}
Run Code Online (Sandbox Code Playgroud)

我在web.xml中添加了一个条目,如下所示:

<listener>
        <listener-class>com.lawless.web.servletContextListeners.TimerContextListener</listener-class>
    </listener>
Run Code Online (Sandbox Code Playgroud)

但是当我启动服务器时,contextInitialized()被调用了3次.知道问题是什么吗?谢谢.

java jboss stripes servlets

9
推荐指数
2
解决办法
8476
查看次数

如何在Play框架2中的字段构造函数之外打印验证错误

如何在Play框架2中的字段构造函数之外显示表单字段的验证错误?这是我尝试过的:

@eventForm.("name").error.message
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

value message is not a member of Option[play.api.data.FormError]
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为在api文档中它说消息是FormError的成员.这也适用于全局错误:

@eventForm.globalError.message
Run Code Online (Sandbox Code Playgroud)

validation scala view playframework playframework-2.0

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

如何在IntelliJ中运行Play Framework 2.1项目?

我有一个现有的Play 2.1项目.我一直用控制台运行它,它工作正常.但是,当我尝试使用IntelliJ使用这些说明运行它时,它不起作用:

https://www.jetbrains.com/help/idea/getting-started-with-play-2-x.html#run_debug_playApp

首先,我尝试通过右键单击应用程序并选择"运行播放2应用程序"来运行它.它不会运行,它给了我这个错误:

sbt.IncompatiblePluginsException: Binary incompatibility in plugins detected.
Run Code Online (Sandbox Code Playgroud)

在对该问题进行一些研究之后,我添加-Djline.terminal=了我的JVM选项并再次尝试.这次它运行了,但是当我尝试在浏览器中打开一个页面时出现了这个错误:

Global : Unsupported major.minor version 52.0
Run Code Online (Sandbox Code Playgroud)

最后,我尝试将我的项目重新导入intellij.在它导入之前,它迫使我将build.properties中的SBT版本从0.12.2更新为0.12.4.我这样做了,但仍然得到了上面列出的相同错误.

注意:我将Java 7设置为我的JDK.

这是完整的堆栈跟踪:

play.api.PlayException: Cannot init the Global object[Global : Unsupported major.minor version 52.0]
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:57) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:51) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.WithDefaultGlobal$class.play$api$WithDefaultGlobal$$globalInstance(Application.scala:50) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance$lzycompute(Application.scala:383) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance(Application.scala:383) ~[play_2.10-2.1.1.jar:2.1.1]
Caused by: java.lang.UnsupportedClassVersionError: Global : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.7.0_80]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) ~[na:1.7.0_80]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.7.0_80]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) ~[na:1.7.0_80]
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) ~[na:1.7.0_80]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.7.0_80]
Run Code Online (Sandbox Code Playgroud)

java intellij-idea sbt playframework-2.0 playframework-2.1

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

验证不适用于Play Framework 2中的嵌套对象

我正在使用Constraint注释来验证Play中的对象!框架2.它适用于顶级对象,但不适用于嵌套对象.如何使嵌套对象验证注释生效?

事件:我正在保存的顶级对象.

@Entity
public class Event {

    @Required
    public String name;

    @OneToMany(cascade = CascadeType.ALL)
    public List<Option> options;

    ...
}
Run Code Online (Sandbox Code Playgroud)

选项:嵌套对象.它没有验证名称属性.

@Entity
public class Option {

    @Required
    public String name;

    ...
}
Run Code Online (Sandbox Code Playgroud)

java validation annotations playframework playframework-2.0

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

如何在 ebean 中预先加载集合?

在 ebean 和 Play Framework 2 中急切获取嵌套集合的正确方法是什么?我试过这个:

Registration registration = find
    .fetch("participants")
    .fetch("participants.fieldValues")
    .fetch("participants.fieldValues.field")
    .where().eq("token", token).findUnique();
Run Code Online (Sandbox Code Playgroud)

出于某种原因,registration.participants.fieldValues.field对象只有一个 id。其余field属性为空。例如field.name,当它应该有一个值时为空。

编辑:如果我将 Field.name 设为私有并为其添加一个 getter/setter,那么我可以获得它的值。但是由于我使用的是fetch("participants.fieldValues.field")不应该让它在不需要 getter/setter 的情况下急切地获取吗?

java eager-loading playframework ebean playframework-2.0

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

什么会导致Intellij突然变得非常慢scala?

我一直在使用Intellij 12构建Play Framework 2应用程序大约一个月.直到昨天一直很好.现在,当我尝试在其中一个scala模板中编写代码时,Intellij变得非常非常慢.就像输入几条新线需要5-10秒.什么会导致这种情况突然发生,我该如何解决?

我尝试将我的vm选项增加到以下内容,但它没有帮助:

-Xms256m
-Xmx800m
-XX:MaxPermSize=512m
-XX:ReservedCodeCacheSize=128m
-XX:+UseCodeCacheFlushing
-XX:+UseCompressedOops
Run Code Online (Sandbox Code Playgroud)

编辑:最近的Intellij或插件更新是否会破坏性能?

编辑:我更新了我的Scala和Play插件,它没有帮助.

performance scala intellij-idea playframework playframework-2.0

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

如何授予对 Amazon S3 中某个文件夹的所有子文件夹的访问权限?

这是我在 Amazon S3 中编写的策略。我认为它应该允许访问子文件夹,因为 * 但当用户尝试创建或查看子文件夹时,它会给出访问被拒绝的错误。我怎样才能改变这个工作?

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "AllowUserToSeeBucketListInTheConsole",
        "Action": [
            "s3:ListAllMyBuckets",
            "s3:GetBucketLocation"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::*"
        ]
    },
    {
        "Sid": "AllowRootAndMediaListingOfCompanyBucket",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::mycoolbucket"
        ],
        "Condition": {
            "StringEquals": {
                "s3:prefix": [
                    "",
                    "media/"
                ],
                "s3:delimiter": [
                    "/"
                ]
            }
        }
    },
    {
        "Sid": "AllowAllS3ActionsInMediaFolder",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::mycoolbucket/media/*"
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

}

更多细节:

我以用户身份登录控制台。我去了媒体文件夹。然后我单击媒体内的文件夹并收到消息“错误访问被拒绝”。

amazon-s3

5
推荐指数
2
解决办法
5168
查看次数

如何在Play框架2中格式化输入值?

如何格式化输入值以在Play中包含2个小数位!框架2?例如,我希望价格看起来像"100.00",但它显示为"100.0".我是使用模型上的注释,还是表单中输入的参数?

我试过这个,但它没有改变格式:

@inputText(myForm("price"), 'format -> "###.##")
Run Code Online (Sandbox Code Playgroud)

java scala view playframework playframework-2.0

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

在Transport.send上获取ParseException(消息)

出于某种原因,当我在MimeMessage上调用Transport.send()时,我得到了一个javax.mail.internet.ParseException.这之前它只是一个纯文本电子邮件,但当我改变它以使文本和HTML开始爆炸.我有什么想法我做错了吗?

@Resource(mappedName = "java:/Mail")
    private Session mailer;

    public void sendMessage(String toEmailAddress, String subject, String content, String text) throws Exception {
        try {
            Message message = new MimeMessage(mailer);

            MimeMultipart rootMixedMultipart = new MimeMultipart("mixed");
            message.setContent(rootMixedMultipart);

            MimeMultipart nestedRelatedMultipart = new MimeMultipart("related");
            MimeBodyPart relatedBodyPart = new MimeBodyPart();
            relatedBodyPart.setContent(nestedRelatedMultipart);
            rootMixedMultipart.addBodyPart(relatedBodyPart);

            MimeMultipart messageBody = new MimeMultipart("alternative");
            MimeBodyPart bodyPart = null;
            for (int i = 0; i < nestedRelatedMultipart.getCount(); i++) {
                BodyPart bp = nestedRelatedMultipart.getBodyPart(i);
                if (bp.getFileName() == null) {
                    bodyPart = (MimeBodyPart) bp;
                }
            }
            if …
Run Code Online (Sandbox Code Playgroud)

java email jakarta-mail parseexception ejb-3.0

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

带有DEFAULT id的INSERT在PostgreSQL中不起作用

我尝试在Postgres中运行此语句:

insert into field (id, name) values (DEFAULT, 'Me')
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

ERROR: null value in column "id" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)

我最终不得不手动设置ID.问题是当我的应用程序插入记录时,我收到重复的密钥错误.我正在使用Play框架和ebean ORM构建一个Java应用程序.因此整个模式由ebean自动生成.在这种情况下,手动将记录插入我的数据库的最佳做法是什么?

编辑:
这是我创建Field类的方法

@Entity
public class Field {
    @id
    public Long id;
    public String name;
}
Run Code Online (Sandbox Code Playgroud)

编辑:
我检查了field_seq序列,它看起来像这样:

CREATE SEQUENCE public.field_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; 
Run Code Online (Sandbox Code Playgroud)

编辑:
这是pgAdmin III中生成的SQL:

CREATE TABLE field
(
  id bigint NOT NULL,
  created timestamp without time zone,
  modified timestamp without time zone,
  name character varying(255),
  enabled boolean,
  auto_set boolean, …
Run Code Online (Sandbox Code Playgroud)

java postgresql insert playframework ebean

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