jsf 1.1 - 将输入值作为参数传递给action或actionlistener

时间:2013-08-14 16:37:44

标签: jsf el

我正在尝试将输入值传递给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>

1 个答案:

答案 0 :(得分: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可以通过这种方式立即在动作(监听器)方法中使用。

  2. 为它(及其父表单)提供固定ID。

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

    并从请求参数map手动抓取它:

    String value = externalContext.getRequestParameterMap().get("formId:inputId");