- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当预期值为 NULL 时,绑定(bind)到 bean String 类型的空表单输入字段将作为空字符串 ("") 接收。
这是一个老问题,似乎每个版本的 Oracle EL、Apache EL 或 Tomcat 都会重现。
@BalusC 已经多次解决这个问题。 Empty String Madness , Tomcat 8 (and 9) coerce behaviour, null strings are incorrectly set as empty strings是几个例子。
我已经尝试了所有以前的解决方法,但都没有成功。
someform.xhtml
<h:form>
<h:outputText value="Some Input: " />
<p:inputText value="#{someBean.stringVariable}" />
<p:commandButton id="search-button"
value="Search"
actionListener="#{someBean.doSearch}" />
</form>
SomeBean.java
private String stringVariable;
// Setter & Getter
public void doSearch()
{
if(stringVariable == null)
{
System.out.println("Input is NULL");
}
else if(stringVariable.equals(""))
{
System.out.println("Input is EMPTY STRING");
}
}
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"
version="2.3">
<application>
<el-resolver>com.example.EmptyToNullStringELResolver</el-resolver>
</application>
<application>
<resource-handler>org.jepsar.primefaces.theme.jepsar.FontAwesomeResourceHandler</resource-handler>
<resource-handler>org.omnifaces.resourcehandler.UnmappedResourceHandler</resource-handler>
</application>
<application>
<el-resolver>
org.primefaces.application.exceptionhandler.PrimeExceptionHandlerELResolver
</el-resolver>
</application>
<factory>
<exception-handler-factory>
org.primefaces.application.exceptionhandler.PrimeExceptionHandlerFactory
</exception-handler-factory>
</factory>
</faces-config>
网络.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
</web-app>
当我使用自定义 EmptyToNullStringELResolver 方法时,会抛出 NPE。
java.lang.NullPointerException
at org.apache.myfaces.shared.resource.ValueExpressionFilterInputStream.read(ValueExpressionFilterInputStream.java:130)
at java.io.InputStream.read(InputStream.java:179)
at java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:385)
at org.omnifaces.util.Utils.stream(Utils.java:397)
at org.omnifaces.resourcehandler.UnmappedResourceHandler.handleResourceRequest(UnmappedResourceHandler.java:176)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:196)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at ...
将最新的 EL jar 从 Oracle 拖放到 WEB/lib 中似乎没有任何效果。 (javax.el-3.0.1-b11.jar)
谢谢,泰德·S
最佳答案
根据 The Empty String Madness文章,EmptyToNullStringELResolver
和 Oracle EL 不需要同时完成。对于 Tomcat 8.0.16 或更新版本,列出了以下内容:
JF: add
javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL=true
context param.
ER: registerEmptyToNullStringELResolver
, or alternatively, just do UE.
UE: migrate/upgrade to Oracle EL implementation version 3.0.1-b05 or newer.
注意“或者”这个词。因此,只做一个或另一个都很好。
至于观察到的 NullPointerException
,当 ResourceHandler
需要流式传输可能包含 EL 表达式的资源时,就会发生这种情况。默认情况下,这仅发生在 CSS 资源上,以便能够支持 How to reference JSF image resource as CSS background image url . ValueExpressionFilterInputStream
表示 MyFaces 的内部类,该类用于在读取 InputStream
时评估 EL 表达式。但是,它显然有一个错误,即它不期望返回 null
而不是具体对象的 EL 表达式。该问题反过来实际上与“空字符串疯狂”的解决方案无关。尽管如此,它还是会发生。您至少应该扫描您的自定义 CSS 文件以查找错误返回 null
的 EL 表达式并修复它们。
关于jsf - 提交为空字符串与空字符串的空白输入字符串字段 - JSF 2.3 MyFaces - Tomcat (TomEE)/9.0.12 (8.0.0-M1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56279977/
EDIT: The solution that you can find in comments below assumes changing JSF implemenetation from MyF
我正在用 MyFaces 在 JSF 中做一些开发工作,我收到了这个警告。 **************************************************************
我是 JSF 的初学者。 据我所知,要开始使用 JSF,我必须下载它的一个实现,例如 Apache MyFaces。但是 myfaces-core 中的库是什么?我的意思是,它们各自执行什么功能? 还
主题标题确实说明了一切: 我想在运行时检测 MyFaces 的版本。这可能吗? 似乎有一个 discussion about this kind of feature很久以前,但我找不到任何内容,如果
我正在尝试执行抽象类中的 PostConstruct 注释方法, public abstract class AbstractTest { @PostConstruct
我是 JSF2.0 的初学者。 我正在使用 MyFaces。 我的小教程应用程序没问题,但我在 MyFaces 的日志中注意到以下内容: org.apache.myfaces.util.Externa
两天前,我开始在我的 jsf 应用程序中使用 tomahawk ExtensionsFilter 组件。我注意到所有 javascript 警报都没有显示特殊字符(ç、ã、ó ô),而是显示类似 #2
例如,当我在 @ManagedBean 的构造函数中强制使用 NPE 时然后我在 Eclipse 中看到了一个很好的堆栈跟踪。但是,当 a4j:commandbutton 的操作中出现同样的错误时那么
目前尚不清楚我是否应该使用 MyFaces 或 Mojarra 作为 JSF 2.0 的 PrimeFaces 实现。 PrimeFaces 与其中一个的问题较少吗? 最佳答案 根据 Primefac
我从 JSF2.0 开始,我使用了教程作为引用,但我有以下问题: 本教程仅使用了 2 个库:来自 Mojarra 项目的 jsf-api.jar、jsf-impl.jar(但也有 JSTL)。 我也尝
我正在将应用程序从 websphere 8.5.5.x 环境迁移到 liberty 20.0.0.3。除了 JSF 部分之外,大部分内容我都可以正常工作。初始化出了问题,我不知道它是什么,也不知道如何
将 Mojarra 更改为 MyFaces 后,我的 Web 应用程序出现了一个奇怪的问题...我有一个从外部加载的xhtml文件,也就是说,这个xhtml被重用了很多:
我有一个带有一些表单、xhtml 页面的 JSF 2.0 项目,添加 MyFaces Trinidad 输入日期组件并运行该应用程序后,当我单击“输入日期”图标时,它没有响应并且不执行任何操作?或者我
我有哪些选项可以从我的 JSP 页面读取当前用户的角色?我知道 Tomahawk 组件上的 visibleOnUserRole="myRole" 属性,但我需要角色来处理比简单可见性更复杂的事情。 最
只是一个愚蠢的初学者问题,很快就会解决,但我很好奇。 http://www.irian.at/myfacesexamples/home.jsf说: “MyFaces - 免费 JavaServer™
我需要创建一个具有登录系统的网络应用程序。用户应该针对数据库进行身份验证。我想在 session 中保存用户角色 - 或者还有其他(更好)的方法吗? 此外还有供用户访问的区域。会客区、用户区,管理区域
我目前正在尝试从 JBOSS Weld AS7 切换到 Wildfly 8 Beta。我编译了它,但是当尝试加载页面本身时,出现以下异常: Caused by: java.lang.IllegalSt
在我们的软件中,我们使用 myfaces 1 实现了 2 个过滤器。首先是/jsf,另一个是/1,其映射类在 web.xml 文件中。它适用于 myfaces 1,但是当我们在 Web 应用程序的每个
我正在使用带有 Facelets 和 Tomahawk 的 MyFaces 1.1.7。 创建常规数据表时,例如:
FacesContext.getCurrentInstance().getExternalContext().getFlash() 我正在尝试使用上面的代码,似乎 getFlash() 在 Myfac
我是一名优秀的程序员,十分优秀!