0

我正在尝试将输入值传递给 jsf action/actionlistner,但遇到了一些问题:当我尝试这种方法时,我收到 EL 错误,说明 ( 无效:

<h:inputText binding="#{pageNoInput1 }" style="font-family:verdana;font-size:0.9em;" maxlength="4" size="4"/>
<a4j:commandLink style="font-family:verdana;font-size:0.9em; margin-left:5px;" value="GO" reRender="deviceList, messagesForm" actionListener="#{viewDevicesBean.goToPageNo(pageNoInput1.value)}" />

当我尝试这种方法时,我在后端 bean 中得到空值: event.getComponent().getAttributes().get("pageNo");

<h:inputText binding="#{pageNoInput1 }" style="font-family:verdana;font-size:0.9em;" maxlength="4" size="4"/>
<a4j:commandLink style="font-family:verdana;font-size:0.9em; margin-left:5px;" value="GO" reRender="deviceList, messagesForm" actionListener="#{viewDevicesBean.goToPageNo}">
    <f:param value="#{pageNoInput1.value}" name="pageNo"/>
</a4j:commandLink>
4

1 回答 1

1

我正在尝试将输入值传递给 jsf action/actionlistner,但遇到了一些问题:当我尝试这种方法时,我收到 EL 错误,说明 ( 无效:

这是自 Servlet 3.0 / EL 2.2 起才支持的开箱即用。因此,如果您部署到与 Servlet 3.0 兼容的容器(Tomcat 7、Glassfish 3 等),那么它会正常工作。但是,如果您的目标是 Servlet 2.5 容器(Tomcat 6、Glassfish 2 等),那么您需要安装 JBoss EL 才能在 EL 中使用参数化方法。但是,如果您的目标是 Servlet 2.4 容器(Tomcat 5.5、SJAS 等),那么您就完全不走运了。

也可以看看:


当我尝试这种方法时,我在后端 bean 中得到空值:event.getComponent().getAttributes().get("pageNo");

UIComponent#getAttributes()返回组件的属性,它们是那些<h:someComponent attribute1="value1" attribute2="value2" ...>和那些嵌套的<f:attribute name="attribute3" value="value3">,等等。但是你只是添加一个<f:param>在这个构造中没有任何意义的。不会在<f:param>表单提交期间评估,而是在表单显示期间评估。

你基本上有两个选择:

  1. 只是不要以荒谬的硬方式来做,并以通常的方式将输入值绑定到 bean 属性。

     <h:inputText value="#{bean.value}">
    

    以这种value方式在 action(listener) 方法中立即可用。

  2. 给它(及其父表单)一个固定的 ID。

     <h:form id="formId"><h:inputText id="inputId">
    

    并从请求参数映射中手动获取它:

     String value = externalContext.getRequestParameterMap().get("formId:inputId");
    
于 2013-08-14T17:01:48.303 回答