【问题标题】:Null value gotten from a f:param inside a h:selectOneMenu in JSF从 JSF 中的 h:selectOneMenu 中的 f:param 获取空值
【发布时间】:2013-03-08 14:32:13
【问题描述】:

我试图通过 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 的值更改为字符串,但在尝试在处理程序中获取该值时总是为空:

public static void OnONeMenuProcNdSelChgeHndler(AjaxBehaviorEvent vce){

        String msntocwiid = FacesContext.getCurrentInstance().getExternalContext()
                .getRequestParameterMap()
                .get("msntocwiid");


        System.out.println("procNdNameSelectedValue : "+procNdNameSelectedValue+" msntocwiid :"+msntocwiid);



    }

selectOneMenu 不支持 f:param 吗?是否有另一种方法来传递值?

感谢您的帮助!

【问题讨论】:

  • getWorkitemid => getWorkitemId 有错字,使用 $ 符号是有原因的吗?
  • no 和 $ 来自 EL,正如我上面提到的,我已经用字符串测试了参数值,但它也没有工作。

标签: jsf-2


【解决方案1】:

仅在UICommand 组件(例如&lt;h:commandLink&gt;&lt;h:commandButton&gt; 等)中支持添加请求参数的&lt;f:param&gt; 子级。 UIInput 组件不支持它。

你的特殊情况你有两个选项来实现具体的功能要求:

  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);
        // ...
    }
    

顺便说一句,您的命名约定很糟糕。我强烈建议您阅读有关该主题的 official resource,以使您自己、您未来的维护者和我们更加高兴。

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2017-06-05
    相关资源
    最近更新 更多