我试图通过h:selectOneMenu中的f:param传递一个值,如下面的代码所示:
<h:selectOneMenu value="#{jbpmAPIUtil.procNdNameSelectedValue}">
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="#{jbpmAPIUtil.procnodes}" var="pn"
itemLabel="#{pn.getName()}" itemValue="#{pn.getId()}" />
<f:ajax event="click" listener="#{jbpmAPIUtil.OnONeMenuProcNdSelChgeHndler}" />
<f:param value="${msntoc.getWorkitemid()}" name="msntocwiid"/>
</h:selectOneMenu>
我甚至将f:param的值更改为String但在尝试在处理程序中获取该值时始终为null:
public static void OnONeMenuProcNdSelChgeHndler(AjaxBehaviorEvent vce){
String msntocwiid = FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap()
.get("msntocwiid");
System.out.println("procNdNameSelectedValue : "+procNdNameSelectedValue+" msntocwiid :"+msntocwiid);
}
selectOneMenu不支持f:param吗?是否有另一种传递值的方法呢?
感谢您的帮助!
答案 0 :(得分:2)
仅<f:param>
个组件(例如UICommand
,<h:commandLink>
等)支持添加请求参数的<h:commandButton>
子级。 UIInput
组件不支持它。
在您的特定情况中,您有2个选项可以实现具体的功能要求:
将其作为侦听器方法参数传递。
<h:selectOneMenu ...>
...
<f:ajax ... listener="#{jbpmAPIUtil.OnONeMenuProcNdSelChgeHndler(msntoc.workitemid)}" />
</h:selectOneMenu>
与
public void OnONeMenuProcNdSelChgeHndler(String msntocwiid) {
// ...
}
或者,如果您确实需要在AjaxBehaviorEvent
处理一些不明原因,请以编程方式对其进行评估。
public void OnONeMenuProcNdSelChgeHndler(AjaxBehaviorEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
String msntocwiid = context.getApplication().evaluateExpressionGet(context, "#{msntoc.workitemid}", String.class);
// ...
}
你顺便说一句可怕的命名惯例。我强烈建议你阅读关于这个主题的official resource来自己做,你未来的维护者和我们会更开心。