似乎每当我更改模型时,Play Framework都会要求我运行一个删除整个模式并重新创建它的脚本.显然这不适合生产,那么在生产中处理这个问题的正确方法是什么?
注意,我正在使用ebean和Postgres,并在heroku上托管.
java postgresql playframework playframework-2.0 playframework-evolutions
我正在使用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) 我正在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次.知道问题是什么吗?谢谢.
如何在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) 我有一个现有的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) 我正在使用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) 在 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 的情况下急切地获取吗?
我一直在使用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
这是我在 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)
}
更多细节:
我以用户身份登录控制台。我去了媒体文件夹。然后我单击媒体内的文件夹并收到消息“错误访问被拒绝”。
如何格式化输入值以在Play中包含2个小数位!框架2?例如,我希望价格看起来像"100.00",但它显示为"100.0".我是使用模型上的注释,还是表单中输入的参数?
我试过这个,但它没有改变格式:
@inputText(myForm("price"), 'format -> "###.##")
Run Code Online (Sandbox Code Playgroud) 出于某种原因,当我在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) 我尝试在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 ×8
ebean ×3
scala ×3
postgresql ×2
validation ×2
view ×2
amazon-s3 ×1
annotations ×1
ejb-3.0 ×1
email ×1
forms ×1
insert ×1
jakarta-mail ×1
jboss ×1
performance ×1
save ×1
sbt ×1
servlets ×1
stripes ×1