一个jsf的face-config.xml看不懂

本文解析了一个JSF项目的face-config.xml文件内容,展示了如何通过自定义的视图处理器和状态管理器来增强应用的功能。具体包括XxxJspDynamicViewerHandler类中对URL的处理逻辑,以及XxxAjaxStateManager类中对视图状态数量的定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚学习jsf,公司一个jsf工程里的face-config.xml看不懂,请大家指点一下!

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<application>
<view-handler>com.xxx.framework.jsf.viewhandler.XxxJspDynamicViewerHandler</view-handler>
<state-manager>com.xxx.framework.jsf.XxxAjaxStateManager</state-manager>
</application>
</faces-config>



package com.Xxx.framework.jsf.viewhandler;

import javax.faces.context.FacesContext;
import org.apache.myfaces.application.jsp.JspViewHandlerImpl;
import com.xxx.framework.constant.FwkConstant;
import com.xxx.framework.logging.AppLogFactory;
import com.xxx.framework.logging.ILog;

public class XxxJspDynamicViewerHandler extends JspViewHandlerImpl {


// For logging:
private final ILog log = AppLogFactory.getLog(XxxJspDynamicViewerHandler.class, FwkConstant.MODULE_SECURITY);

public String getActionURL(FacesContext facesContext, String viewId) {
String path = "";
int nIndexOfFollowingParamSign = -1;
if ( XxxJspDynamicViewerHandler.containsXxxJspViewHandlerImpIndicator(viewId) ) {

nIndexOfFollowingParamSign = viewId.indexOf("?");
if ( -1 != nIndexOfFollowingParamSign) {
path = super.getActionURL(facesContext, viewId) + viewId.substring(nIndexOfFollowingParamSign);
} // end if
} // end if


if ( path != null && path.length() == 0 ) {
path = super.getActionURL(facesContext, viewId);
}

return path;
}

public static boolean containsXxxJspViewHandlerImpIndicator(String paramStr) {
return ((null != paramStr) && (paramStr.indexOf(FwkConstant.Xxx_VIEWHANDLER_INDICATOR) != -1)) ? true : false;
}

}



package com.Xxx.framework.jsf;

import javax.faces.application.StateManager;
import javax.faces.context.ExternalContext;

import org.ajax4jsf.application.AjaxStateManager;

public class XxxAjaxStateManager extends AjaxStateManager{
private static final String VIEW_PARAM_KEY = "com.wtt.framework.NUMBER_OF_STATES_IN_VIEW";
private int numberOfViews = -1;

public XxxAjaxStateManager(StateManager stateManager) {
super(stateManager);
}

@Override
protected int getNumberOfViews(ExternalContext externalContext) {
if (this.numberOfViews == -1) {
if (externalContext.getInitParameter(VIEW_PARAM_KEY) != null) {
try {
this.numberOfViews = Integer.valueOf(externalContext.getInitParameter(VIEW_PARAM_KEY));
} catch (NumberFormatException nfe) {
this.numberOfViews = super.getNumberOfViews(externalContext);
}
}
}
return this.numberOfViews;
}
}
<think>好的,我需要解决用户关于JSFfaces-config.xml文件位置的问题。首先,用户之前的问题是关于form标签的prependId属性,现在转向配置文件的位置,可能是在配置过程中遇到了问题。根据提供的引用,用户之前的问题涉及web.xmlfaces-config.xml的配置,但引用中没有直接提到faces-config.xml的位置。不过,根据我的知识,JSF的配置文件通常位于WEB-INF目录下。需要确认标准位置和可能的其他位置。用户可能使用的是Maven项目结构,所以需要说明标准Mavenwebapp的结构。faces-config.xml通常放在WEB-INF/下,或者作为资源文件在src/main/resources/META-INF/中,特别是当使用多个模块时。另外,需要提到JSF2.0之后的注解简化了配置,但传统项目可能仍使用faces-config.xml。还要检查是否需要配置web.xml来指向该文件,或者是否默认自动加载。可能用户对配置文件的放置有疑问,尤其是在部署时找不到导致应用出错。需要分步骤说明不同情况下的位置,并给出验证方法,比如检查部署后的目录结构。最后,生成相关问题,帮助用户进一步了解JSF配置,比如与其他框架整合时的配置位置,或版本差异带来的变化。</think>### JSFfaces-config.xml 文件的标准位置解析 #### 一、基础定位规则 根据 Java EE 规范,`faces-config.xml` 的标准存储位置遵循以下路径结构: $$ \text{WebRoot}/WEB-INF/faces-config.xml $$ 典型 Maven 项目的物理路径为: ``` src └─main └─webapp └─WEB-INF └─faces-config.xml [^1][^2] ``` #### 二、多模块项目配置 在模块化开发场景中,允许通过以下扩展路径进行配置: $$ \text{Classpath}/META-INF/faces-config.xml $$ 该配置适用于: 1. 包含 JSF 组件的 JAR 文件 2. 多模块项目的共享配置 3. 第三方库扩展配置 #### 三、版本兼容性差异 | JSF 版本 | 配置文件必要性 | 默认加载机制 | |----------|-----------------------------|---------------------------| | ≤ 1.x | 必须显式配置 | 需 web.xml 声明 | | ≥ 2.x | 支持注解替代(可选配置) | 自动扫描 classpath 配置 | JSF 2.0+ 项目若保留 XML 配置,仍优先读取 WEB-INF 下的文件[^3]。 #### 四、验证配置有效性 可通过以下方法确认配置加载: ```xml <!-- 在 web.xml 中添加检查参数 --> <context-param> <param-name>javax.faces.CONFIG_FILES</param-name> <param-value>/WEB-INF/faces-config.xml</param-value> </context-param> ``` 若配置成功,启动时控制台会输出: ``` INFO: Loading application config: /WEB-INF/faces-config.xml ``` #### 五、部署结构示例 最终部署包(WAR)的典型结构: ``` myapp.war ├─META-INF ├─WEB-INF │ ├─faces-config.xml ← 核心配置文件 │ ├─web.xml ← 包含 FacesServlet 配置 │ └─classes └─resources ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值