小编Ala*_*ect的帖子

如何从EclipseLink中捕获约束违规异常?

我在我的Web应用程序中使用EclipseLink,我很难优雅地捕获和处理它生成的异常.我从这个线程看到似乎是一个类似的问题,但我没有看到如何解决或修复它.

我的代码看起来像这样:

public void persist(Category category) {
    try {
        utx.begin();
        em.persist(category);
        utx.commit();
    } catch (RollbackException ex) {
           // Log something
    } catch (HeuristicMixedException ex) {
           // Log something
    } catch (HeuristicRollbackException ex) {
           // Log something
    } catch (SecurityException ex) {
           // Log something
    } catch (IllegalStateException ex) {
           // Log something
    } catch (NotSupportedException ex) {
           // Log something
    } catch (SystemException ex) {
           // Log something
    }
}
Run Code Online (Sandbox Code Playgroud)

当使用违反唯一性约束的实体调用persist()时,我会收到容器捕获和记录的异常爆炸.

Exception [EclipseLink-4002] (Eclipse Persistence Services …
Run Code Online (Sandbox Code Playgroud)

jpa eclipselink jpa-2.0

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

Angular 2组件输入没有值

我想创建一个具有不需要值的属性的组件.例如,而不是像这样的东西:(我现在有)

<app-document [mode]="'edit'" ... ></app-document>
Run Code Online (Sandbox Code Playgroud)

要么

<app-document [editMode]="true" ... ></app-document>
Run Code Online (Sandbox Code Playgroud)

我宁愿:

<app-document editMode ...></app-document>
Run Code Online (Sandbox Code Playgroud)

因此组件本身必须查看属性editMode是否存在.当我有很多这样的属性时,这看起来会更清晰.我还没有看到有关如何执行此操作的任何文档.它可行吗?

angular

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

为什么我的托管bean中不能有静态公共字段?

我刚刚开始使用Netbeans 7.1测试版,它正在调出我以前从未见过的类型的错误.特别:

A managed bean with a public field should not declare any scope other than @Dependent.

它抱怨的领域是public static final.我可以理解对非静态字段的限制,但我想不出一个很好的理由不允许静态字段.不幸的是我使用了很多,因为我不喜欢在我的代码中使用常量.

我注意到即使我在编辑器的边缘得到红点,maven驱动的构建仍然有效,GlassFish仍然以我期望的方式运行我的应用程序.

那么我对这个问题的看法是什么?我是否必须在其他地方移动我的静态字段,还是有其他方法来处理它?

netbeans cdi jsf-2 netbeans-7

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

从什么时候开始if/else需要括号?

我刚刚在最新的Netbeans中开始了一个新项目,我注意到它已经开始给我这样的代码的代码建议:

    if (a == null) x = 0;
    else x = 1;
Run Code Online (Sandbox Code Playgroud)

它说

If-Else Statements MUST use Braces
Run Code Online (Sandbox Code Playgroud)

它想"修复"它:

    if (a == null) {
        x = 0;
    }
    else {
        x = 1;
    }
Run Code Online (Sandbox Code Playgroud)

这根本不是我想要的.我特别关注这一点,它使代码看起来不必要地混乱.我有成千上万行代码不使用(显然不需要)额外的大括号.假设Netbeans做对了,这个要求何时发生,是什么驱使它?

PS我知道我可以关掉这些消息.

更新问题:

我写这篇文章的方式可能并不明显,但根据@ corsiKa的评论,我可能会澄清一下.我真的不想讨论花括号是否适合.我想知道他们是否有必要.

编写和制作Netbeans的男孩和女孩通常很好地插入社区,以及Java正在采取什么方向或预期的方向.所以我认为有可能当他们使用咨询机制给我们提醒java语法将要改变时,我正在使用的代码实践将在某个时候被弃用.

从下面saber_raider的回答看来,答案是否定的.看来,Netbeans的咨询与字夸大MUST作为神秘建议.

java netbeans

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

如何从Filter中获取SessionScoped CDI bean?

这个问题与前一个关于编写会话超时处理程序的问题有关.

该线程的答案涉及从servlet访问各种会话范围的托管bean.建议(如看到这里)是这样做的过滤器:

HttpSession session = request.getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;
Run Code Online (Sandbox Code Playgroud)

据推测,这会获取User类的会话bean .问题是这不起作用.

出了什么问题,bean在会话属性中存在,但它们由Weld工具包装.我写了doFilter()方法如下:

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    String sp = req.getServletPath();
    System.out.println("------------------------");
    System.out.println("doFilter(): " + sp);

    if (!sp.startsWith("/javax")) {  // eliminates many requests
        HttpSession session = req.getSession();
        Enumeration<String> en = session.getAttributeNames();
        int count = 0;            
        while (en.hasMoreElements()) …
Run Code Online (Sandbox Code Playgroud)

cdi jsf-2 servlet-filters

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

toPromise() 是否取消订阅 Observable?

我找不到任何规范文本来回答这个问题。我一直在使用这种代码模式(这是在 Angular 应用程序中的 TypeScript 中):


observeSomethingFun$: Observable<Fun>;
    ...
async loadsOfFun() {
  const fun = await this.observeSomethingFun$.toPromise();
    // I now have fun
}

Run Code Online (Sandbox Code Playgroud)

一般来说,Observables 需要取消订阅。async使用Angular管道时会自动发生这种情况,但在这种情况下会发生什么?toPromise发出一个值后是否取消订阅?

如果没有,我如何手动取消订阅?

更新:

事实证明@Will Taylor 下面的回答是正确的,但我的问题需要澄清一下。

在我的例子中,Observable 发出一个永无止境的流,这与 Angular 的HttpClient Observables 不同,它在发出一个值后完成。因此,在我的情况下,await根据泰勒的回答,我永远不会通过声明。

RxJS 使这个问题很容易解决。正确的说法是:

const fun = await this.observeSomethingFun$.pipe(first()).toPromise();
Run Code Online (Sandbox Code Playgroud)

RxJSfirst操作符将接收第一个值并取消订阅源 Observable。然后它会将该值发送给toPromise操作员,然后完成。

rxjs

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

将资源注入UIComponent(又称CDI在这里工作吗?)

我正在编写一个需要与我的DAO交互的(复合)组件.以下是声明Java部分的方式:

@FacesComponent(value="selectLocation")
public class SelectLocation extends UINamingContainer {
Run Code Online (Sandbox Code Playgroud)

为了获取DAO对象,我尝试了CDI注释:

    @Inject private LocationControl lc;
Run Code Online (Sandbox Code Playgroud)

这没用,所以我尝试了Faces注释:

    @ManagedProperty (value = "@{locationControl}") private LocationControl lc;
Run Code Online (Sandbox Code Playgroud)

两种情况都没有发生 - 属性lc在构造函数完成后最终为null.

我在所有的后台bean中使用CDI,一切正常.这将使用GlassFish 3.1.1中的Weld.有关如何获取资源的任何建议?

cdi composite-component jsf-2

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

如何有条件地为表格单元格中的背景着色?

我正在使用p:dataTable(PrimeFaces)渲染一个表,我想要做的是根据内容的值为单元格的背景着色.这与着色行或列不同 - 它是单个单元格.

首先是一个CSS问题.如果我这样做:

                    <p:column headerText="xyzzy">
                        <div style="background-color: green">
                            <h:outputText value="#{rowVar.anumber}" >
                                <f:convertNumber groupingUsed="true" />
                            </h:outputText>                        
                        </div>
                    </p:column>
Run Code Online (Sandbox Code Playgroud)

仅设置内容的背景颜色,而不是整个单元格.换句话说,填充仍然是默认值.

其次,我想使样式字符串成为变量表达式.我可以向辅助bean添加一个函数,但是如何访问方法中的表内容?这会有用吗?

<div style="#{bean.computeCSS(rowVar.number}">
Run Code Online (Sandbox Code Playgroud)

编辑:

我找到了一种方法来完成条件部分,但我仍然需要CSS部分的帮助.我的解决方案如下:

                    <p:column headerText="xyzzy">
                        <div class="#{rowVar.anumber gt 0 ? 'colored' : ''}">
                            <h:outputText value="#{rowVar.anumber}">
                                <f:convertNumber groupingUsed="true" />
                            </h:outputText>                        
                        </div>
                    </p:column>
Run Code Online (Sandbox Code Playgroud)

虽然我不喜欢在EL中使用,但这样做的好处是不需要支持bean方法.

但是我仍然只获得背景颜色,而不是整个细胞.

jsf primefaces jsf-2

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

如何在Angular组件中使用枚举

我的Angular组件倾向于具有全局状态(或“模式”),因此我正在寻找一种有效地对此进行编码的方法。我试图做的是这样的:

@Component({
      ....
})
export class AbcComponent implements OnInit {

  enum State {
    init, view, edit, create, wait
  }
  state: State = State.init;
Run Code Online (Sandbox Code Playgroud)

这个想法是,AbcComponent内部的函数可以简单地通过设置state属性来驱动模板的操作。例如:

<div class="col" *ngIf="state === State.view"> ... </div>
Run Code Online (Sandbox Code Playgroud)

问题是枚举定义不能出现在结构内。然后,如果我将其移动到结构之外,则模板不会在其本地范围内。

有正确/更好的方法吗?

PS:如果我一直在做的事情是,我有几个布尔属性,每个状态一个。例如modeInit modeView等。它的工作原理,但它是笨拙的,因为只有一个应该是真正的在同一时间。

typescript angular

7
推荐指数
2
解决办法
6024
查看次数

来自 ActivatedRoute 的 Angular 承诺不适用于 Typescript await

要访问当前 URL 路径中的组件,在我的应用程序中执行以下操作:

constructor(private route: ActivatedRoute) { }
...
load() {
    this.route.params.subscribe((params) => {
      const id = +params['id'];
      console.log('got parameter', id);
 ... etc
Run Code Online (Sandbox Code Playgroud)

这是教科书案例,变量id设置为广告。但我想使用更优雅的await形式,但它不起作用。(当然,后面会有一串await语句。)像这样:

async load() {
    try {
      console.log('getting parameters');
      const params = await this.route.params.toPromise();
      console.log('got params', params);
      const id = +params['id'];
  ... etc
Run Code Online (Sandbox Code Playgroud)

我得到的是第一个console.log()调用的输出,但第二个从未出现。当然,id变量没有设置,其余的代码永远不会执行。

文档和工作代码说this.route.params是一个Observable,它应该可以通过toPromise()转换为Promise,从而与 Typescript async / await 一起使用。我对来自HttpClient模块的Observable使用await语句就好了。

但它不起作用。有谁知道为什么?

javascript rxjs typescript angular

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