我正在尝试将输入值传递给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>
答案 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>
。
你基本上有两种选择:
不要以荒谬的方式做到这一点,并以通常的方式将输入值绑定到bean属性。
<h:inputText value="#{bean.value}">
value
可以通过这种方式立即在动作(监听器)方法中使用。
为它(及其父表单)提供固定ID。
<h:form id="formId"><h:inputText id="inputId">
并从请求参数map手动抓取它:
String value = externalContext.getRequestParameterMap().get("formId:inputId");