小编dog*_*ose的帖子

JSF跳过Required-Validation而不是immediate = true

我有多种形式,我有必填字段和可选字段.

提交这样的表单,我需要对要执行的required属性进行验证,这样可以正常工作.要取消这样的形式我使用属性immediate="true"p:commandbutton,这使得在其作用发生应用请求值 -PHASE如下处理:点击一个特定的按钮时如何跳过验证?

但是,对于大型表单,我想为用户提供一个Save-Button,以便他可以稍后继续.

为了保存当前状态,我还想忽略required-attribute的验证.但是,使用immediate="true"不起作用,因为那时我的save方法简单保存,因为JSF生命周期永远不会命中"UpdateModelValues"-Phase.(根据http://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html)

那么,如何绕过所需的检查但不跳过生命周期的一半?

validation lifecycle jsf immediate-attribute

42
推荐指数
3
解决办法
5万
查看次数

JPA Query.getResultList() - 以通用方式使用

我正在创建一个包含多个表的复杂查询,需要列出结果.通常,我正在使用EntityManager并将结果映射到JPA-Representation:

UserEntity user = em.find(UserEntity.class, "5");
Run Code Online (Sandbox Code Playgroud)

然后我可以在用户UserEntity类定义它时访问所有值.但是,如何访问本机多表查询返回的字段值?我得到的是一个对象列表.到目前为止这很好,但对象是什么"是"?阵列?地图?采集?...

//simpleExample
Query query = em.createNativeQuery("SELECT u.name,s.something FROM user u, someTable s WHERE s.user_id = u.id");
List list = query.getResultList();

//do sth. with the list, for example access "something" for every result row.
Run Code Online (Sandbox Code Playgroud)

我想答案很简单,但是大多数示例只显示直接转换为targetClass时的用法.

PS:在示例中,我当然可以使用类映射.但在我的情况下someTable不是由JPA管理,因此我没有实体,也没有它的类表示,因为我加入了20个表,我不想创建所有的类只是为了访问这些值.

java hibernate jpa

26
推荐指数
4
解决办法
11万
查看次数

JBAS015893:遇到无效的类名

我目前正在清理我的项目和相关的错误/警告.每次我将我的Maven项目部署到JBoss AS 7.1.1.Final我都会收到很多警告.

我发现很多帖子/评论只是忽略或隐藏这些警告.

好吧,警告只是警告,但是应该可以解决警告的原因,而不是隐藏或忽略那些警告(因为我认为:现在什么是警告,在某些其他方面可能会成为错误)

09:51:55,145 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) JBAS015876: Starting deployment of "oce2.war"
09:51:56,241 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid class name 'implementingClassName=org.jboss.shrinkwrap.impl.base.ConfigurableArchiveImpl' for service type 'org.jboss.shrinkwrap.spi.Configurable'
09:51:56,242 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid class name 'implementingClassName=org.jboss.shrinkwrap.impl.base.GenericArchiveImpl' for service type 'org.jboss.shrinkwrap.api.GenericArchive'
09:51:56,244 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid class name 'extension=.jar' for service type 'org.jboss.shrinkwrap.api.GenericArchive'
09:51:56,245 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid …
Run Code Online (Sandbox Code Playgroud)

deployment jboss war maven

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

php"glob"和重复数据删除?

我有一个php应用程序(按要求)扫描一些文件的存在.(在网络共享上)

我正在使用glob这个,因为通常我只知道文件名的开头.

我注意到,这glob不会返回当前由任何客户端打开的文件,因此我的应用程序认为file_xy不存在,如果有人打开它.

有没有办法让glob回复打开(:=锁定?)文件?

奇怪的是,这没有提到的地方.但是我可以确认glob不返回当前由客户端打开的文件...(一旦客户端关闭访问应用程序,glob将像往常一样返回文件)


ps.:glob("\\server\share\*")只要打开文件就不会返回文件.(网络共享允许最大并发用户数)


    $dir = opendir ("\\server\share");
    while ($file = readdir($dir)){
      echo $file."<br />";
    }
Run Code Online (Sandbox Code Playgroud)

无论是否由其他客户打开,都可以完美地显示相关文件. - 所以我几乎可以排除任何访问限制/许可的东西......


我想通了的原因,即使我不知道原因,现在:

glob()当文件位于使用Windows Server 2012 R2内置重复数据删除功能的驱动器上时,将显示未找到打开文件的问题.

如果我将文件移动到非重复数据删除共享glob(),即使由多个客户端打开,也可以读取它.


由于我有一个可行的替代方案,这个问题应该主要关注为什么 glob不起作用的问题- 或者让我们说这里的工作不同.在如何glob以及readdir访问底层文件系统以确定内容方面必须有所不同.


另一个证明

还有另一个证明,这与数据重复数据删除有关:我将该功能配置为"仅"重复删除超过3天的文件.

我设置了一个cronjob,"打开并整理"共享中的某个文件.一旦它大约3天(Windows决定何时进行重复数据删除),当它由另一个客户端打开时,glob无法列出该文件.

因此,glob能够找到打开的文件,这些文件在前3天内被复制到共享中 - 然后在进行重复数据删除后开始错过它.

意见

glob的

glob 失败,导致这篇文章:-)

SCANDIR

使用上面提到的scandir函数显示了相同的行为:

  • 客户端打开的重复数据删除文件 - 在结果数组中丢失.
  • 客户端未打开重复数据删除文件 - 结果数组的一部分.

opendir/readdir

我想再次强调, …

php glob windows-server-2012-r2

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

JPA/Hibernate OneToMany Mapping,使用复合PrimaryKey

我目前正在努力使用复合主键类的方案正确的映射注释.首先,我想用文字来实现:

我有2个类:group和FieldAccessRule.组可以有多个FieldAccessRules,而FieldAccessRule只有一个组分配.到目前为止,修改这个问题不是一个问题(简化):

public class Group{
    ...
    @OneToMany(mappedBy = "group")
    private Set<FieldAccessRule> fieldAccessRules;
    ... 
}
Run Code Online (Sandbox Code Playgroud)

并为FieldAccessRule:

public class FieldAccessRule {
    ...
    @ManyToOne
    @JoinColumn(name = "group_id")
    private Group group;
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我决定使用复合PK作为FieldAccessRule,因为规则对于ONE Group和ONE Field应该是唯一的.它看起来像这样:

@Embeddable
public class FieldAccessRulePK implements Serializable{
    private String fieldKey;
    private Group group;
    ...
}
Run Code Online (Sandbox Code Playgroud)

和ofc.FieldAccessRule需要更改为

public class FieldAccessRule {
    ...
    @EmbeddedId
    private FieldAccessRulePK fieldAccessRulePK;
    ...
}
Run Code Online (Sandbox Code Playgroud)

如何为Group的FieldAccessRuleSet创建正确的映射?这样做,我得到:

在属性"fieldAccessRules"中,"映射者"值"组"无法解析为目标实体上的>属性.

什么是创建从Group到PrimaryKey的PART的映射的正确方法?

编辑:我知道发现,使用

public class Group{
    ...
    @OneToMany(mappedBy = "fieldAccessRolePK.group")
    private Set<FieldAccessRule> fieldAccessRules;
    ... 
}
Run Code Online (Sandbox Code Playgroud)

完全按预期工作.它编译得很好,它可以很好地创建数据库,并且在加载具有预定义角色的组之后,它们可以按预期使用.

但是,Eclipse仍然说

在属性"fieldAccessRules"中,"映射的"值"fieldAccessRulePK.group"无法解析为目标实体上的属性.

我不确定,如果忽略错误并且"假设"每一件事情都很好......(我发现一个帖子,据说已经说过,Hibernate支持模式attr1.attr2的映射但不支持JPA确认. )

jpa one-to-many embeddable

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

如何在同一个Hibernate事务中运行本机SQL查询?

我们有一个服务@Statefull.大多数数据操作都是原子的,但在一组函数中我们希望native queries在一个事务中运行多个.

我们注入了EntityManager一个事务范围的持久化上下文.在创建正常实体的"束"时,使用em.persist()一切工作正常.

但是当使用本机查询(某些表没有任何表示@Entity)时,Hibernate不会在同一个事务中运行它们,但基本上每个查询使用一个事务.

因此,我已经尝试使用手册START TRANSACTION;COMMIT;条目 - 但这似乎干扰了事务,hibernate在混合本机查询和持久性调用时用于持久化实体.

@Statefull
class Service{

   @PersistenceContext(unitName = "service")
   private EntityManager em;

   public void doSth(){
      this.em.createNativeQuery("blabla").executeUpdate();
      this.em.persist(SomeEntity);
      this.em.createNativeQuery("blablubb").executeUpdate();
   }
}
Run Code Online (Sandbox Code Playgroud)

此方法中的所有内容都应在一个事务中发生.这可能与Hibernate一起使用吗?在调试它时,可以清楚地看到每个语句都发生在任何事务的"独立"状态.(即每次声明后立即将更改刷新到数据库.)


我已经使用最小设置测试了波纹管给出的示例,以便消除问题上的任何其他因素(字符串仅用于在每次查询后检查数据库的断点):

@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER) 
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
public class TestService {

    @PersistenceContext(name = "test")
    private EntityManager em;

    public void transactionalCreation(){
        em.createNativeQuery("INSERT INTO `ttest` (`name`,`state`,`constraintCol`)VALUES('a','b','c')").executeUpdate();
        String x = "test";
        em.createNativeQuery("INSERT INTO `ttest` (`name`,`state`,`constraintCol`)VALUES('a','c','b')").executeUpdate();
        String y = "test2";
        em.createNativeQuery("INSERT INTO `ttest` (`name`,`state`,`constraintCol`)VALUES('c','b','a')").executeUpdate();
    }
}
Run Code Online (Sandbox Code Playgroud)

Hibernate配置如下: …

java mysql hibernate jpa transactions

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

JPA + Hibernate =没有EntityManager的持久性提供程序

我正在尝试使用Hibernate作为提供程序为我的Maven项目设置JPA.

项目结构

??? META-INF
?    ??? persistence.xml
??? src
|   ??? main
|   |   ??? java
|   |       ??? model
|   |       |   ??? Instance.java
|   |       ??? App.java
|   ??? test
|       ??? java
|           ??? model
|               ??? AppTest.java
??? pom.xml
Run Code Online (Sandbox Code Playgroud)

persistence.xml的内容

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
    <persistence-unit name="testjpa" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>it.vitrociset.model.Instance</class>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/aquasystem"/>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
            <property name="hibernate.connection.username" value="username"/>
            <property name="hibernate.connection.password" value="password"/>
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

Instance.java的内容

package model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa maven

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

Java语句,处理优先级("悬挂其他")

鉴于以下有效代码:

Boolean a = false;

if (a)
   System.out.println("A");
else
   System.out.println("!A");
Run Code Online (Sandbox Code Playgroud)

现在,根据文档if包括它的条件和内部statement也是一个statement(https://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html - 至少它被称为statement全文档)

例如:

   if (b){
      System.out.println("B");
   }
Run Code Online (Sandbox Code Playgroud)

是一个statement.

但是,当我们要用另一个语句替换现有语句时,它不应该触及整体逻辑,对吧?假设我们更换(表达) - if-statementelse上面:

Boolean a = false;
Boolean b = false:

if (a)
   if (b){
      System.out.println("A and B");
   }
else
   System.out.println("!A");
Run Code Online (Sandbox Code Playgroud)

Java编译器将如下解释代码示例(完整的大括号用于解释):

Boolean a = false;
Boolean b = false:

if (a){
   if (b){
      System.out.println("A and B");
   } else {
      System.out.println("!A");
   }
}
Run Code Online (Sandbox Code Playgroud)

这不是最初的逻辑.

那么为什么要交换一个声明而另一个声明改变逻辑呢? …

java if-statement

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

确定通知是否调用了Activity

我正在使用带有各种TabsActivitiy.从应用程序的不同部分创建通知,以告知用户某些内容已更改.当用户点击通知时,我现在设法调用活动.但是,如何在运行时或通过单击通知确定活动是以"正常"方式创建的?

(根据单击的通知,我想转发到另一个选项卡而不是显示主选项卡.)

Intent intent = new Intent(ctx, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, intent, 0);

        // TODO: Replace with .Build() for api >= 16
        Notification noti = new Notification.Builder(ctx)
                .setContentTitle("Notification"
                .setContentText(this.getName())
                .setSmallIcon(R.drawable.icon)
                .setContentIntent(pendingIntent)
                .setDefaults(
                        Notification.DEFAULT_SOUND
                                | Notification.DEFAULT_LIGHTS)
                .setAutoCancel(true)
                .getNotification();

        NotificationManager notificationManager = (NotificationManager) ctx
                .getSystemService(Context.NOTIFICATION_SERVICE);

        // Hide the notification after its selected
        notificationManager.notify(this.getId(), noti); 
Run Code Online (Sandbox Code Playgroud)

这成功调用了我的MainActivity.但是,当Activity被触发时,是否有一些方法被调用pendingIntent

想在主要活动中定义这样的东西:

onTriggeredByNotification(Notification noti){
     //determinte tab, depending on Notification.
}
Run Code Online (Sandbox Code Playgroud)

notifications android android-pendingintent

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

2038-01-19之后的MySQL from_unixtime?

我们将日期存储为unix时间戳.为了允许用户搜索特定日期 - 基于他的时区设置,我们用于在查询中转换该时间戳,以确保搜索"2012-05-03"将找不到先前/下一个的结果一天取决于用户设置的时区.

即如果日期存储为2012-05-03 23:00 (UTC)具有适当时区偏移搜索的用户2012-05-04应找到此条目.

目前这样做是这样的:

CONVERT_TZ(FROM_UNIXTIME(`javaTimeStampColumn`/1000),'+00:00','+00:00')
Run Code Online (Sandbox Code Playgroud)

在哪里 根据用户时区设置偏移量.

我们目前面临的问题是:Java成功地将一年后的日期存储2038为unix-timestamp.from_unixtime然而,MySQL方法不支持任何大于2147483647由于它的整数类型限制的值的转换:

SELECT FROM_UNIXTIME(2147483647); //2038-01-19 04:14:07

SELECT FROM_UNIXTIME(2147483648); //null
Run Code Online (Sandbox Code Playgroud)

MySQL服务器本身是64位,但是ofc.FROM_UNIXTIME需要接受一个长期的论点.

我现在找不到合适的替代品,有什么提示吗?


我们可以.将时间戳加载为Long并在应用程序中处理它 - 但对于延迟编码,我们还需要能够在查询期间正确转换它.

mysql timestamp

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