为了从资源包中检索Strings,我试图比较这两种方法的结果,下面是代码示例:
第一个例子:
basName:资源包的完全限定名称(
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
ResourceBundle bundle = app.getResourceBundle(context, baseName);
第二个例子:
varName:是表示
FacesContext context = FacesContext.getCurrentInstance();
Locale locale = context .getViewRoot().getLocale();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
ResourceBundle bundle = ResourceBundle.getBundle(varName, locale, loader);
这两个例子有什么区别?如果没有区别,获取ResourceBundle(使用Application#getMessageBundle()或ResourceBundle#getBundle())的最佳实践是什么?
首先,您混淆了方法的varName/baseName。实际做法是:
varName
:是表示
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
ResourceBundle bundle = application.getResourceBundle(context, varName);
是资源包的完全限定名称,如
FacesContext context = FacesContext.getCurrentInstance();
Locale locale = context.getViewRoot().getLocale();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, loader);
前者通过JSF
应用程序
获取,该应用程序在封面下还将使用UIViewRoot#getLocale()
(回退到Locale#getDefault()
),后者直接获取。
至于技术和最终结果,没有区别。在这两种情况下,您将得到完全相同的捆绑包(前提是区域设置正确)。然而,关于可维护性,这是完全不同的。资源包属于“配置”范畴,必须将其外部化(在
faces config.xml
中)。
在
baseName
中硬编码FQN是一种糟糕的做法。如果不重新编译和重建所有代码,就无法轻松地快速更改FQN。如果它位于第三方JAR文件中,则会更加麻烦。否则,您可以使用另一个
顺便说一下,还有第三种方法:注射它。
在JSF托管bean中,提供了一个
@ManagedProperty("#{text}")
private ResourceBundle text;
或者在CDI管理的bean中:
@Inject
private PropertyResourceBundle text;
与这位制作人:
public class BundleProducer {
@Produces
public PropertyResourceBundle getBundle() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().evaluateExpressionGet(context, "#{text}", PropertyResourceBundle.class);
}
}
注意:EL评估
{text}
捆绑包在应用程序#getResourceBundle()
的封面下使用。
我们试图将JSF2.0 web应用程序部署到Apache Tomcat/7.0.23中。我们得到以下错误: 下面是web.xml: 有什么可能导致这个错误的提示吗?
我已经阅读了一些关于将Web应用和API应用部署到Azure的教程。然而,我仍然有点不确定为什么你会使用一个而不是另一个。 我可以创建一个新的。NET解决方案,并将其部署为Web应用程序,那么为什么我会特别需要API应用程序呢?这些都是专门为ASP优化的。NET Web API,其中Web应用程序用于交付HTML?
我想知道IDE中的Jave EE项目和Java Web项目在方面的主要区别。事实上,如果选择Java web类别,您可以在IDE中基于、和JavaServer Faces创建web应用程序。 另一方面,选择项目类别为Jave EE项目,NetBeans IDE将创建3个子项目,例如:StoreApp(企业应用项目)、StoreApp-ejb(EJB项目)和StoreApp-war(Web项目)。
这可能是一个很难回答的问题,但是在很多教程和示例中,我看到这些注释的使用就好像它们做了同样的事情。 但是,我使用时遇到了一些限制(尤其是依赖注入等),我找不到解释差异的源,如果有人能给出一个大致的概述,说明什么时候使用这两个,我将非常感谢。
混合移动应用程序:PhoneGap和Cordova的区别: 我知道PhoneGap提供PhoneBuild服务来为您构建应用程序,它使用的是cordova的一个版本,但人们发现使用PhoneGap比cordova还有其他好处吗?
当我们在Azure Active Directory中注册应用程序以使用graph api时,我看到有两种类型的应用程序Web应用程序和本机应用程序。 创建web应用程序时,请求了两个值%1。登录URL和2。应用程序ID URL。这些数值有什么用?我们需要真实世界的url还是只需要https://localhost:randomeport就够了? 关于权限,对于本机应用程序,我只能看到可用的“委托