JSF2.2使用新命名空间时h:selectOneMenu组件报500错误求助
兄弟,你这完全是踩了JSF2.2新命名空间的混用坑!先给你把问题根源掰扯清楚:
JSF2.2引入的http://xmlns.jcp.org/jsf命名空间(也就是jsf:前缀),专门是用来改造普通HTML标签的——比如你想让原生的<input type="text">变成JSF可管理的组件,就给它加jsf:id、jsf:value这类属性。但传统的JSF组件标签(比如h:前缀的h:selectOneMenu、f:前缀的f:selectItem)本身就是JSF原生感知的,根本不需要用jsf:开头的属性,一旦混用就会触发你看到的那个500错误。
你需要做的修改:
- 检查你的
h:selectOneMenu和相关selectItem代码,把所有带jsf:前缀的属性全部去掉前缀,换成组件本身的原生属性。 - 给你贴个正确的示例写法:
<h:selectOneMenu id="categoryMenu" value="#{yourBean.selectedCategory}"> <f:selectItem itemLabel="请选择分类" itemValue="" /> <f:selectItem itemLabel="技术专区" itemValue="tech" /> <f:selectItem itemLabel="生活日常" itemValue="life" /> </h:selectOneMenu>
这里h:selectOneMenu用的是原生id属性(不是jsf:id),f:selectItem用的是itemLabel、itemValue这些标准属性,完全没有混用命名空间,自然就不会报错了。
再给你划个重点规则:
- 传统JSF组件(
h:/f:前缀):只用它们自己的原生属性,别碰jsf:前缀的属性。 - 普通HTML标签(
<input>/<div>等):要转成JSF组件时,才用jsf:前缀的属性来增强。
内容的提问来源于stack exchange,提问作者Stenio Vilar
相关产品推荐
相关产品推荐

