小编Lau*_*ens的帖子

在不同种类的JSF管理豆之间做出区分

我最近阅读了来自Neil Griffin的这篇文章,在不同种类的JSF Managed-Beans之间做出区分,这让我想到了我自己的应用程序中不同bean之间的区别.要快速总结一下要点:

  • Model Managed-Bean:这种类型的托管bean参与MVC设计模式的"模型"关注.当你看到"模型"这个词时 - 想想数据.JSF模型bean应该是遵循JavaBean设计模式的POJO,其中getter/setter封装属性.

  • 支持托管Bean:这种类型的托管bean参与MVC设计模式的"视图"关注.backing-bean的目的是支持UI逻辑,并且与Facef组合中的JSF视图或JSF表单具有1 :: 1的关系.虽然它通常具有带有关联getter/setter的JavaBean样式属性,但它们是View的属性 - 而不是底层应用程序数据模型的属性.JSF支持bean也可能有JSF actionListener和valueChangeListener方法.

  • Controller Managed-Bean:这种类型的托管bean参与MVC设计模式的"Controller"关注.控制器bean的目的是执行某种业务逻辑并将导航结果返回给JSF导航处理程序.JSF控制器bean通常具有JSF操作方法(而不是actionListener方法).

  • 支持Managed-Bean:这种类型的bean"支持"MVC设计模式的"View"关注中的一个或多个视图.典型的用例是向JSF h:selectOneMenu下拉列表提供ArrayList,这些列表出现在多个JSF视图中.如果下拉列表中的数据特定于用户,则bean将保留在会话范围内.

  • Utility Managed-Bean:这种类型的bean为一个或多个JSF视图提供某种类型的"实用程序"功能.一个很好的例子可能是FileUpload bean,它可以在多个Web应用程序中重用.

这对我来说很有意义,在过去的几个小时里,我一直在重构我的代码,并针对用户登录提出以下内容:

AuthenticationController是Controller Managed-Bean的一个例子.它是请求范围的,具有两个用于设置用户名和密码的getter和setter,以及两种导航方法,authenticatelogout在成功登录时将用户导航到其私有区域,或者在注销时返回主页面.

UserBean是一个支持管理Bean的示例.它是会话范围的,并且具有User类的实例(当您未经过身份验证时将使用getter和setter,它将为null),仅此而已.

AuthenticationController有这个用户作为托管属性(@ManagedProperty(value = "#{userController.user} private User user;).验证成功后,AuthenticationController将使用用于登录的相应用户名将托管属性设置为实际用户实例.

任何新的bean都可以将用户作为托管属性获取并提取他们需要的数据,例如组成员资格,如果User该类具有包含组名的列表.

这种方式是关于分离问题的正确方法吗?

java jsf java-ee backing-beans

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

托管bean和会话bean之间的区别

说我有一个实体课,汽车. 

@Entity
public class Car
Run Code Online (Sandbox Code Playgroud)

我的IDE让我自动从实体类生成会话bean,所以我最终得到了一个CarFacade

@Stateless
public class CarFacade
Run Code Online (Sandbox Code Playgroud)

我也可以生成JSF托管bean

@ManagedBean     
@RequestScoped
public class RegistrationController
Run Code Online (Sandbox Code Playgroud)

我可以理解Entity类和其他bean之间的有意义的区别,但是无状态会话bean和托管bean之间有什么区别?我读到无状态会话bean用于实现对实体进行操作的业务逻辑,而托管bean用于与基于Web的前端进行交互,方法是在托管bean上调用网页,并进行托管bean调用会话bean上的业务方法.

因此,在我的示例中,RegistrationController将具有网页将调用的+ register(String carRegistration)方法.RegistrationController将依次实例化Car并在会话bean上调用+ create(Car car),这会持久化它.

它是否正确?

java jsf ejb java-ee

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

Ruby on Rails多个模型名称

我有一个代表航班规则的域模型.飞行规则是执行航班的一系列法规.视觉飞行规则或VFR就是这样一个例子.我试图建立这个模型,但是Rails坚持使用FlightRulessingular(FlightRule),而我需要它保持复数.是否有任何方法让Rails保持模型名称复数?

ruby-on-rails

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

由于不正确的清单,并排配置不正确

我最初在libRocket论坛上问了这个问题,但鉴于进一步的调查表明这更像是一个普通的C++/Visual Studio相关问题,我在这里问.

我正在运行Visual Studio C++ 2010 Express并已将完整的Win32源代码下载到libRocket 1.2.1.我已经成功地在调试模式下编译它而没有错误或警告,现在我试图让它在我的应用程序中运行,该应用程序是在SFML 1.6之上构建的.

我的应用程序编译没有错误或警告反对重新编译的libRocket.但是,一旦我尝试运行它,我就会收到一条错误消息The application was unable to start correctly (0xc0150002). Click OK to close the application.

当我用Dependency Walker打开我的可执行文件时,我收到以下错误:

Error: The Side-by-Side configuration information for "ROCKETCORE_D.DLL" contains errors. The application has failed to start because its side-by-side configuration is incorrect.

我发现这很奇怪,因为它还显示我的应用程序和RocketCore_d.dll,具体取决于MSVCP100D.DLL和MSVCR100D.DLL.那里没有不匹配.所以我接着表演了sxstrace:

=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = Wow32
    CultureFallBacks = en-US;en
    ManifestPath = Binaries\Debug\RocketCore_d.dll
    AssemblyDirectory = Binaries\Debug\
    Application Config File = 
-----------------
INFO: …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010

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

包com.sun.org.apache.xml.internal.security.utils.Base64不存在

我正在使用NetBeans 7.0.1和JDK 1.6 Update 24,并在导入包com.sun.org.apache.xml.internal.security.utils.Base64以编码密码哈希时:

u.setPassword(Base64.encode(digest(password)));
Run Code Online (Sandbox Code Playgroud)

但是在编译时,我收到以下错误:

(omitted)\RegistrationController.java:8: package com.sun.org.apache.xml.internal.security.utils does not exist
import com.sun.org.apache.xml.internal.security.utils.Base64;

(omitted)\RegistrationController.java:94: cannot find symbol
symbol  : variable Base64
location: class RegistrationController
    u.setPassword(Base64.encode(digest(password)));
2 errors
Run Code Online (Sandbox Code Playgroud)

我已经阅读了有关同一问题的其他几个问题,但所有问题都涉及不属于JDK的软件包,而这是(rt.jar).代码辅助工作在类型上并扩展jar显示源代码和二进制文件实际上也存在.

我已经尝试清理项目,重建它,将源文件复制到一个全新的Enterprise项目并以管理员身份运行NetBeans,但都无济于事.关于如何解决这个问题的任何线索非常感谢!

谢谢!

java netbeans

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

禁用HTML输入字段中的文本上的黑色下划线

我有一个Cordova应用程序,在工具栏中有一个搜索字段.它是一个常规HTML输入字段,隐藏边框,背景设置为透明.当用户开始在Android(5.0)上打字时,当前单词以黑色加下划线,而键盘则提供自动完成建议.我试图在输入字段上设置以下属性:

<input autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="search" ng-change="search()" ng-model="ident" placeholder="Search" style="text-decoration: none;">
Run Code Online (Sandbox Code Playgroud)

然而,这似乎并没有解决问题.我该如何防止这种行为?

HTML输入字段中的文本上的黑色下划线

html css

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

泽西岛(REST)子资源CDI

我正在开发一个企业项目,该项目具有EJB模块和在GlassFish v3.1,Weld v1.1和Jersey上运行的Web项目.在EJB中,我定义了一个实体类Manufacturer并生成了一个会话Facade ManufacturerFacade.

在Web项目中,我希望Manufacturer通过REST 公开实例.为此,我创建了以下资源:

ManufacturersResource是一个容器资源,它返回存储在数据库中的所有制造商的列表.它通过注入ManufacturerFacade和调用findAll()方法来实现.缩写代码:

@RequestScoped
@Path("/manufacturer")
public class ManufacturersResource {

    @Inject
    private ManufacturerFacade manufacturerFacade;

    @GET
    @Produces("application/xml")
    public List<Manufacturer> getManufacturers() {
        return manufacturerFacade.findAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

该资源还有一个子资源:

@Path("{id}")
public ManufacturerResource getManufacturer(@PathParam("id") String id) {
    return ManufacturerResource.getInstance(id, manufacturerFacade);
}
Run Code Online (Sandbox Code Playgroud)

ManufacturerFacade如下外观:

public class ManufacturerResource {

    @Inject
    private ManufacturerFacade manufacturerFacade;

    private long id;

    private ManufacturerResource(String id) {
        this.id = Long.parseLong(id);
    }

    public static ManufacturerResource getInstance(String id,) {
        return new …
Run Code Online (Sandbox Code Playgroud)

java rest jersey java-ee

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

绑定用户实体和GlassFish Principal

我有一个实体类User,其中包含用户名,名字,姓氏和密码等信息,我有我的GlassFish 3.1服务器设置来执行身份验证.到现在为止还挺好.在容器对用户进行身份验证之后,我需要一些方法将主体绑定到实际的User实体.毕竟,GlassFish告诉我用户"laurens"已经过身份验证,它没有给我相应的User实体.

为此,我编写了一个JSF托管bean UserController.我想知道的是,如果这是查看实际实体的正确方法,如果有任何明显的陷阱,我没有看到.

UserController 具有以下字段:

@EJB
private UserFacade userFacade;

private User user;
Run Code Online (Sandbox Code Playgroud)

userFacade是一个无状态会话bean,用于持久化和查找User实例.userJSF页面使用该字段来获取和设置用户的属性.

我使用以下方法执行绑定,并伴有两个辅助方法:

@PostConstruct
private void init() {
    try {
        user = userFacade.find(getUserPrincipal().getName());
    } catch (NullPointerException ex) {
        // Intentionally left empty -- User is not logged in.
    }
}

private HttpServletRequest getHttpServletRequest() {
    return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
}

private Principal getUserPrincipal() {
    return getHttpServletRequest().getUserPrincipal();
}
Run Code Online (Sandbox Code Playgroud)

JSF页面使用以下方法来确定要显示的组件(如果用户已经过身份验证,则无需显示登录表单),如果单击"登录"按钮,则对用户进行身份验证,或者注册为单击"注册"按钮时的新用户.

public boolean isAuthenticated() {
    return getUserPrincipal() != null;
}

public void …
Run Code Online (Sandbox Code Playgroud)

java jsf glassfish java-ee

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

验证Ruby on Rails中的虚拟属性

我在Rails(3.2.0)上运行Ruby(1.9.3)并且在验证虚拟属性方面存在问题.

我有一个Flight代表航班的模型,其中包含代表出发和到达机场的属性.

因为select选择一个机场可能很大,我选择了自动完成解决方案,这是完全正常的.我正在使用before_validation回调来正确填充机场的实际ID:

before_validation do
  self.departure_airport = Airport.find_by_long_name(departure_airport_name)
  self.arrival_airport = Airport.find_by_long_name(arrival_airport_name)
end
Run Code Online (Sandbox Code Playgroud)

但问题是,当用户输入数据库中不存在的机场名称时,提交失败,因为任一机场的ID都是nil.大.然而,有什么不好的是,这个验证失败没有反映在表单上,​​因为从技术上讲,它是另一个字段的输入:

validates :departure_airport, :arrival_airport presence: true

attr_accessor :departure_airport_name, :arrival_airport_name

<%= f.input :departure_airport_name %>
<%= f.input :arrival_airport_name %>
Run Code Online (Sandbox Code Playgroud)

这甚至是正确进行的方式,将机场名称转换为before_validation回调中的ID ?如果是这样,我怎样才能将验证错误显示在机场的虚拟名称属性上?

ruby-on-rails

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

嵌入式GlassFish忽略Maven测试资源

我有几个会话bean,我已经编写了单元测试.我已经设置Maven在src/main/resources/META-INF目录中包含一个persistence.xml,该目录引用本地MySQL数据库用于开发目的.我在src/test/resources/META-INF目录中有另一个persistence.xml,它引用了嵌入式Derby数据库__default.测试部署到嵌入式GlassFish 3.1容器中.

但是,当我运行测试时,我收到以下错误:

java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'jdbc/mylog' 
Run Code Online (Sandbox Code Playgroud)

jdbc/mylog是主目录中的持久性单元引用的MySQL数据库.它显然忽略了测试目录中的持久性单元,但我不知道为什么.

据我所知,Maven正确地设置类路径,在类之前使用测试类,在实际目标/测试类/ META-INF目录中查看它显示它复制了正确的嵌入式Derby持久性单元.

[DEBUG] Test Classpath :
[DEBUG]   C:\Users\Laurens\Documents\Projects\Mylog\target\test-classes
[DEBUG]   C:\Users\Laurens\Documents\Projects\Mylog\target\classes
[DEBUG]   C:\Users\Laurens\.m2\repository\org\eclipse\persistence\eclipselink\2.2.0\eclipselink-2.2.0.jar
[DEBUG]   C:\Users\Laurens\.m2\repository\org\eclipse\persistence\javax.persistence\2.0.3\javax.persistence-2.0.3.jar
[DEBUG]   C:\Users\Laurens\.m2\repository\org\eclipse\persistence\org.eclipse.persistence.jpa.modelgen.processor\2.2.0\org.eclipse.persistence.jpa.modelgen.processor-2.2.0.jar
[DEBUG]   C:\Users\Laurens\.m2\repository\org\glassfish\extras\glassfish-embedded-all\3.1\glassfish-embedded-all-3.1.jar
[DEBUG]   C:\Users\Laurens\.m2\repository\javax\javaee-web-api\6.0\javaee-web-api-6.0.jar
[DEBUG]   C:\Users\Laurens\.m2\repository\junit\junit\4.8.1\junit-4.8.1.jar
Run Code Online (Sandbox Code Playgroud)

关于如何让GlassFish使用正确的持久性单元的任何暗示非常感谢!谢谢!

java jpa glassfish java-ee maven

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