小编Ben*_*n J的帖子

Tomcat为其他开放日食项目中的类抛出ClassNotFound异常

我有一个eclipse项目结构,看起来像这样:

eclipse
    project a
    project b
Run Code Online (Sandbox Code Playgroud)

所有这些项目都是Maven项目.项目B是Eclipse WTP项目,包含项目A作为依赖项.我正在使用m2eclipse插件.

当我将Project B部署到Tomcat(全部来自Eclipse中)时,它总是抛出错误,说它无法从Project A中找到类.我可以解决这个问题的唯一方法是在Eclipse中关闭 Project A并执行mvn install命令,所以在这一点上,项目A被视为任何其他依赖项.

我希望不必再次重新打开,然后每当我对其进行更改时关闭项目A(这在此阶段经常发生).

我已经尝试将Project A添加到Project B的Build Path中,但是这似乎并没有成功.同样,它只有在我在eclipse中关闭项目时才有效,所以它被视为普通的maven依赖.

仅供参考我正在使用Helios版Eclipse.项目B是一个Spring项目,所以Tomcat在导入所有bean等时自然会失败.

有没有人有什么建议?非常感谢.

java eclipse tomcat m2eclipse classnotfoundexception

22
推荐指数
4
解决办法
3万
查看次数

OO设计和循环依赖

在设计我的类时,我目前正在努力解决循环依赖问题.

自从我读到有关贫血领域模型(我一直在做的事情)以来,我一直在努力摆脱创建只是"吸气剂和孵化器"的域对象并回到我的OO根源.

但是,下面的问题是我经常遇到的问题,我不确定应该如何解决它.

假设我们有一个Team类,有很多玩家.这是什么运动并不重要:)球队可以添加和删除球员,就像球员离开球队并加入另一支球队一样.

所以我们有一个团队,其中有一个玩家列表:

public class Team {

    private List<Player> players;

    // snip.

    public void removePlayer(Player player) {
        players.remove(player);
        // Do other admin work when a player leaves
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我们有了Player,它引用了Team:

public class Player {
    private Team team;

    public void leaveTeam() {
        team = null;
        // Do some more player stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

可以假设这两种方法(删除和离开)都具有特定于域的逻辑,只要团队移除玩家并且玩家离开团队就需要运行这些逻辑.因此,我首先想到的是当一个团队踢一个玩家时,removePlayer(...)也应该调用player.leaveTeam()方法......

但是如果玩家正在推动出发 - 如果leaveTeam()方法调用team.removePlayer(this)该怎么办?不是没有创造无限循环!

在过去,我刚刚将这些对象设为"哑"POJO,并让服务层完成工作.但即使是现在我仍然存在这个问题:为了避免循环依赖,服务层仍然将它们连接在一起 - 即

public class SomeService {

    public void leave(Player player, …
Run Code Online (Sandbox Code Playgroud)

java oop circular-dependency

19
推荐指数
2
解决办法
3438
查看次数

没有"每个"的jQuery性能差异

更新已添加的jsfiddle - 请参阅帖子的底部

我目前有一个功能可以重新启用屏幕上所有禁用的字段.虽然它运行得非常快(根据Firebug profiler <1ms),我正在整理屏幕中的所有Javascript,并认为这个特殊功能似乎有点多余:

function enableDisabledFields() {
    $('[disabled]').each(function(i) {
        $(this).removeAttr('disabled');
    });
}
Run Code Online (Sandbox Code Playgroud)

我的印象是这3行可以替换如下,我预计如果不比至少相同的性能更好.

function enableDisabledFields() {
    $('[disabled]').removeAttr('disabled');
}
Run Code Online (Sandbox Code Playgroud)

显然我错了.第一个表现要好得多,我不太明白为什么.即使添加额外的选择器,例如:输入也没有区别(实际上会使情况变得更糟).

任何人都可以解决我的困惑吗?谢谢.

编辑我应该补充说我们正在使用旧版本的jQuery - 1.3.1我相信.

Edit2这里有一些jsFiddle链接.请记住,我可能误解了Firebug的剖析器(我认为似乎是这种情况).

选项1:http://jsfiddle.net/kcut7/

选项2:http://jsfiddle.net/ZgZpU/

jquery

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

将错误从服务层传递回视图

编辑:我已经查看了Spring 3的@ExceptionHandler注释,并将其与下面的选项1相结合,看起来是一个非常干净的解决方案.

请参阅http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers

我也发现这是一个很好的阅读:http://blog.decaresystems.ie/index.php/2006/04/07/difficult-choices-in-handling-exceptions-in-enterprise-java-applications/


我一直在使用Spring MVC框架开发一段时间,但是我正在努力想出一个"好的"方法来将服务层中引发的错误传递回JSP.

基本上,我不认为业务逻辑(超出"此字段是强制性的")应该在Validators中,尤其是需要访问DB的任何逻辑.所以,我一直在做的是在服务层中放置更复杂的验证和业务逻辑.

例如,假设我有一个允许用户购买图书的页面.他们在JSP上单击"购买",控制器调用服务使其全部发生......现在,如果服务看到他们没有足够的资金会发生什么 - 我如何将这个消息发送回JSP这么好的一点点可以向用户显示"资金不足"消息?我考虑过两种方式而且我不确定哪种方法是正确的......

选项1:例外

我认为的第一种方法是在服务层中引发异常,将其捕获到控制器中并向BindingResult添加消息.

服务:

public void pay(Book book) throws InsufficientFundsException {
    // Some logic goes here, which ends up throwing the above exception
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public ModelAndView(@ModelAttribute("book") Book book, BindingResult errors) {
    try {
        pay(book);
    } catch (InsufficientFundsException ex) {
        errors.reject("insufficient.funds");
    }
    return new ModelAndView(blahblahblah);
}
Run Code Online (Sandbox Code Playgroud)

选项2:将BindingResult传递给Service层

第二种方法是将BindingResult对象传递给服务层并针对它引发进一步的错误.

服务:

public void pay(Book book, BindingResult errors) {
    // User has insufficient funds, so... …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc

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

包名称 - impl v 内部

在我研究 Java API 的过程中,我遇到过 impl 包和内部包。到目前为止,我从未真正考虑过其中的区别 - 与所有企业级 Java 应用程序一样,我认为它们只是意味着“此处的实际实现;您(API 用户)应该真正使用该接口。走开。”

对 Stack Overflow 的一点挖掘似乎表明内部包至少可以有一些安全措施

那么区别是什么呢?我不认为这是一个品味问题,因为我已经看到过两者都有的 API。

java

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

Tomcat重启后,Spring Security主体未完全填充

我的问题很简单,在服务器重启(我自己的本地Tomcat)之后,Spring Security主体对象将重新填充每个字段(用户名,密码,电子邮件,用户类型等),用户ID字段除外.

我有以下User对象,它实现了Spring的UserDetails对象,并且还扩展了我自己的基础对象类:

public class User extends BaseDomainObject implements UserDetails {
    private String username;
    private String emailAddress;
    private String password;
    // ... etc ... /
}
Run Code Online (Sandbox Code Playgroud)

(仅供参考,User类有一个构造函数,它接受除ID之外的所有字段(由hibernate偷偷注入).此对象上没有setter.不确定这是否重要.)

用户ID字段位于BaseDomainObject中:

class BaseDomainObject {
    protected Long id;
    public Long getId() {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

成功登录后,主体将填充上述用户详细信息(包括ID),一切都很满意.这由以下日志输出(其中包含User [id,username,emailAddress]形式的上述User类的toString表示)确认:

2011-07-26 11:50:25,188 DEBUG [org.springframework.security.web.context.HttpSessionSecurityContextRepository] - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: 'org.springframework.security.core.context.SecurityContextImpl@5e8fac5a: Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@5e8fac5a: Principal: User[1,test,test@test.com]; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@255f8: RemoteIpAddress: 0:0:0:0:0:0:0:1%0; SessionId: 450FFF87C04098ECC58C2E0829D21D69; Granted Authorities: ROLE_USER, ROLE_CUSTOMER'
Run Code Online (Sandbox Code Playgroud)

但是,在服务器重新启动后,相同的日志输出如下所示:

2011-07-26 …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security

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

在Play中使用纯JSP标记

如果这是一个愚蠢的问题我很抱歉,但我找不到任何有关此问题的信息.

我想在我的应用程序视图中使用JSP标记(而不是播放'标记') - 特别是用于格式化的Joda Time JSP标记.

我无法弄清楚如何调用这些标签 - 在JSP中我只需要导入taglib然后关闭.

  <%@taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %>
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了一些简单的内容 - 如何在Play视图定义中执行此操作?目前我的taglib调用呈现为HTML.我知道Play的视图内容是基于Groovy的 - 我也试过在那里找到相关信息但是没有成功.

谢谢.

编辑对于它的价值,我开始怀疑我在这里误解了这种情况 - 我是否认为Play模板引擎与JSP 无关并且是一种替代而不是扩展?

java jsp jodatime playframework

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