从JSF中的h:selectOneMenu中的f:param获取空值

时间:2013-03-08 14:32:13

标签: jsf-2

我试图通过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吗?是否有另一种传递值的方法呢?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

<f:param>个组件(例如UICommand<h:commandLink>等)支持添加请求参数的<h:commandButton>子级。 UIInput组件不支持它。

您的特定情况中,您有2个选项可以实现具体的功能要求:

  1. 将其作为侦听器方法参数传递。

    <h:selectOneMenu ...>
        ...
        <f:ajax ... listener="#{jbpmAPIUtil.OnONeMenuProcNdSelChgeHndler(msntoc.workitemid)}" />
    </h:selectOneMenu>
    

    public void OnONeMenuProcNdSelChgeHndler(String msntocwiid) {
        // ...
    }
    

  2. 或者,如果您确实需要在AjaxBehaviorEvent处理一些不明原因,请以编程方式对其进行评估。

    public void OnONeMenuProcNdSelChgeHndler(AjaxBehaviorEvent event) {
        FacesContext context = FacesContext.getCurrentInstance();
        String msntocwiid = context.getApplication().evaluateExpressionGet(context, "#{msntoc.workitemid}", String.class);
        // ...
    }
    

  3. 你顺便说一句可怕的命名惯例。我强烈建议你阅读关于这个主题的official resource来自己做,你未来的维护者和我们会更开心。