我最近阅读了来自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,以及两种导航方法,authenticate并logout在成功登录时将用户导航到其私有区域,或者在注销时返回主页面.
这UserBean是一个支持管理Bean的示例.它是会话范围的,并且具有User类的实例(当您未经过身份验证时将使用getter和setter,它将为null),仅此而已.
该AuthenticationController有这个用户作为托管属性(@ManagedProperty(value = "#{userController.user} private User user;).验证成功后,AuthenticationController将使用用于登录的相应用户名将托管属性设置为实际用户实例.
任何新的bean都可以将用户作为托管属性获取并提取他们需要的数据,例如组成员资格,如果User该类具有包含组名的列表.
这种方式是关于分离问题的正确方法吗?
说我有一个实体课,汽车.
@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),这会持久化它.
它是否正确?
我有一个代表航班规则的域模型.飞行规则是执行航班的一系列法规.视觉飞行规则或VFR就是这样一个例子.我试图建立这个模型,但是Rails坚持使用FlightRulessingular(FlightRule),而我需要它保持复数.是否有任何方法让Rails保持模型名称复数?
我最初在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) 我正在使用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,但都无济于事.关于如何解决这个问题的任何线索非常感谢!
谢谢!
我有一个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)
然而,这似乎并没有解决问题.我该如何防止这种行为?

我正在开发一个企业项目,该项目具有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) 我有一个实体类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) 我在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 ?如果是这样,我怎样才能将验证错误显示在机场的虚拟名称属性上?
我有几个会话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使用正确的持久性单元的任何暗示非常感谢!谢谢!