WAS8.5运行Java应用报Component ID已使用JspException原因咨询
异常根因分析及解决方法
WAS 8.5 自带的JSF(MyFaces)实现对组件ID唯一性的校验规则比其他容器更严格,仅单JSP无重复定义的前提下,该异常通常由以下几种情况触发:
- 页面多次引入导致重复渲染:如果存放该组件的JSP被
<jsp:include>、<ui:include>、<c:import>等标签在同个视图内引入多次,哪怕是嵌套在不同父模板中,都会导致同ID组件被重复渲染到视图。 - JSF视图缓存冲突:WAS 8.5默认开启JSF视图缓存,若页面更新后未清空WAS临时缓存、或者用户会话残留了旧的视图状态,新旧视图的组件信息重叠会触发ID重复校验报错。可先清空WAS工作目录、浏览器缓存后复现验证是否为缓存问题。
- 命名容器ID隔离失效:JSF中
<h:form>、<h:dataTable>、<ui:repeat>等属于命名容器,默认会给容器内组件ID增加前缀做隔离。如果同视图下多个命名容器都定义了ResultURLID、或者配置了prependId="false"关闭了前缀生成,都会导致全局ID冲突。可直接移除组件上硬编码的id属性,让JSF自动生成唯一ID规避冲突:
<h:inputHidden value="http://localhost:9080/HP_Web/DefaultLoginServlet"/>
- WAS内置JSF实现已知缺陷:WAS 8.5内置的MyFaces 2.0.x版本存在多个ID校验相关的已知Bug,若排查后确认无重复引入逻辑,可调整应用类加载顺序为“优先加载应用自身类”,在应用内打包独立的JSF实现替换WAS默认的JSF版本即可解决。
内容的提问来源于stack exchange,提问作者runnerpaul
相关产品推荐
相关产品推荐

