45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样在JSF应用请求值之前获取参数值?

怎么样在JSF应用请求值之前获取参数值?

2016-09-03 19:30:54 来源:www.45fan.com 【

怎么样在JSF应用请求值之前获取参数值?

JSF 应用请求值之前获取参数值

实现者:^^cngdcn^^ (48380277)
整理:Samland

问题描述:
我要实现维护"类型", 类型以typename和typeid作为组合主键. 而typeid值存在层次关系,
所以设置typeparent作为指向上级typeid的指针.
因此在相同的typename情况下, typeparent可以指向typeid.

举例说明:
typenametypeidtypeparent
企业E
国有企业GE说明:国有企业属于企业
私营企业SE
个体户T
事业单位U
中学M
高中SM说明:高中属于中学
初中JM
中专中技TM
中级技工GT
中专师范CT


那么在列表点击"编辑"某一个记录时, 必须传递参数typename和typeid, 以此获得记录
详细内容提供修改, 并且, 以_typename_作为参数生成typeparent下拉选择列表, 提供
选择后赋予记录的typeparent属性.
-----------------------------------
<h:selectOneMenu value="#{typeallForm.oaTypeall.typeparent }">
<f:selectItem itemValue="" itemLabel="(请选择)"/>
<f:selectItems value="#{typeallForm.parentTypes}" />
</h:selectOneMenu>

public SelectItem[] getParentTypes(){
TypeAll typeall = new TypeAll();
this.parentTypes = typeall.getSelectItem(this.typeName);
if (this.parentTypes==null) this.parentTypes = new SelectItem[0];
return this.parentTypes;
}
-----------------------------------
在生成编辑页面时,因为typeName参数已经赋予了typeallForm的typeName属性,
因此getParentTypes()方法可以正常返回下拉列表.

问题是, 当提交的时候,
却在getParentTypes()方法出现typeName=null的现象,从而无法继续执行save的ActionEvent.

源代码如下:
-----------------------------------
<h:inputHidden value="#{typeallForm.typeName }"></h:inputHidden>
<h:inputHidden value="#{typeallForm.oaTypeall.typename }"></h:inputHidden>
<h:inputHidden value="#{typeallForm.oaTypeall.typeid }"></h:inputHidden>
<h:commandButton action="#{typeallForm.save }" value="提交"></h:commandButton>
-----------------------------------

解决办法:
1. 为selectOneMenu加上validator, 并且为#{typeallForm.typeName }加上id和immedate属性
-----------------------------------
<h:selectOneMenu value="#{typeallForm.oaTypeall.typeparent }" validator="#{typeallForm.saveState}">
<f:selectItem itemValue="" itemLabel="(请选择)"/>
<f:selectItems value="#{typeallForm.parentTypes}" />
</h:selectOneMenu>

<h:inputHidden id="typeName" value="#{typeallForm.typeName }" immediate="true"></h:inputHidden>
-----------------------------------

2. 在typeallForm中增加saveState方法
public void saveState(FacesContext context,UIComponent component,Object value){
component.findComponent("typeName").processUpdates(context);
}

原因:
分析中.欢迎参与讨论.

 

本文地址:http://www.45fan.com/a/question/71934.html
Tags: 之前 JSF 求值
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部