Sph*_*ynx 9 jsf el jsf-2.2 java-ee-7
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
在glassfish 4和wildfly 8 Final上不适用最新的Mojarra 2.2.5
Manfried Riem 说,我已经看到了关于此的多个错误报告,
确定这是一个EL问题,EL实现已经修复以解决这个问题
修复版本说2.2.5,它也在2.2.5的发行说明中说明,我错过了什么?
Sph*_*ynx 12
使用自定义解析器修复:
faces-config.xml中:
<application>
<el-resolver>my.package.EmptyNullStringResolver</el-resolver>
</application>
Run Code Online (Sandbox Code Playgroud)
EmptyNullStringResolver.java:
/**
* @author pg
*/
public class EmptyNullStringResolver extends ELResolver {
@Override
public Class<?> getCommonPropertyType(ELContext context, Object base) {
return String.class;
}
@Override
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
return null;
}
@Override
public Class<?> getType(ELContext context, Object base, Object property) {
return null;
}
@Override
public Object getValue(ELContext context, Object base, Object property) {
return null;
}
@Override
public boolean isReadOnly(ELContext context, Object base, Object property) {
return true;
}
@Override
public void setValue(ELContext context, Object base, Object property, Object value) {
}
@Override
public Object convertToType(ELContext context, Object obj, Class<?> targetType) {
if (String.class.equals(targetType) && obj instanceof String && ((String) obj).trim().isEmpty()) {
context.setPropertyResolved(true);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
Manfried Riem 说,我已经看到了关于此的多个错误报告,
确定这是一个EL问题,EL实现已经修复以解决这个问题
修复版本说2.2.5,它也在2.2.5的发行说明中说明,我错过了什么?
实际修复是在EL中,而不是在JSF中.问题报告中提到的Mojarra版本只是"巧合"当时最新的Mojarra版本.另见空字符串疯狂.
基本上,要解决这个问题,你需要升级EL实现(或者只是整个服务器,因为它实际上提供EL开箱即用).对于Oracle/Sun EL,此修复程序在版本3.0.1 b05中,自2014年7月7日起可用(仅选择最新版本).您可以直接删除JAR /WEB-INF/lib,如果需要,可以添加以下配置web.xml,以防您的服务器提供与Oracle/Sun EL不同的EL实现,这也暴露了相同的错误:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
或者您可以安装替代EL实现,例如JUEL:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>de.odysseus.el.ExpressionFactoryImpl</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
如果你使用的MyFaces,而不是钻嘴鱼科,使用<param-name>的org.apache.myfaces.EXPRESSION_FACTORY.
至于升级服务器,带有修复程序的EL版本至少存在于GlassFish 4.1和WildFly 8.2中.
| 归档时间: |
|
| 查看次数: |
4536 次 |
| 最近记录: |