使h:panelGroup可单击,并发回重复变量

时间:2013-08-29 15:41:45

标签: ajax jsf

我需要点击一个panelGrid(一个从对象列表中填充的人),然后将与之关联的项目发送到辅助bean。

我的HTML适用于:

<ui:repeat var="searchItem" value="#{bean.filteredSearchItems}" varStatus="searchResult">
    <h:panelGrid>
        <!-- I get some info here from the searchResult object -->
    </h:panelGrid>
    <f:ajax event="click" listener="{bean.clickFlight}" />
    <f:param name="lfi" value="#{searchResult.index}" />
</ui:repeat>

我知道(在我的支持bean中)我需要一个可以处理ajax调用的函数clickSearchItem(),所以为了测试所有这些,我在我的支持bean中做了以下事情:

public void clickFlight()
{
    HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String lfi = req.getParameter("lfi");

if (lfi == null)
    log.info("LFI WAS RETURNED AS NULL :(");

    log.info("HOPEFULLY AN INDEX OF SOME SORT!: " + lfi);
}

没有记录任何内容 - 点击不会注册。有没有其他人有这个问题?有谁知道如何解决它?

1 个答案:

答案 0 :(得分:3)

<f:ajax>需要嵌套到实现ClientBehaviorHolder的组件中。如果您打算使用<h:panelGrid>(生成HTML <table>),那么您应该将<f:ajax>嵌套在组件本身中。

<h:panelGrid>
    <f:ajax event="click" listener="{bean.clickFlight}" />

    <!-- I get some info here from the searchResult object -->
</h:panelGrid>

<f:param>仅由<h:outputFormat><h:commandXxx>的渲染器识别。如果您的目标是Servlet 3.0兼容容器(Tomcat 7,Glassfish 3,JBoss 6/7等),因此支持EL 2.2,那么您可以将其作为方法参数传递:

<h:panelGrid>
    <f:ajax event="click" listener="{bean.clickFlight(searchResult.index)}" />

    <!-- I get some info here from the searchResult object -->
</h:panelGrid>

如果愿意,你甚至可以传递整个对象:

<h:panelGrid>
    <f:ajax event="click" listener="{bean.clickFlight(searchResult)}" />

    <!-- I get some info here from the searchResult object -->
</h:panelGrid>

另一种方法是,如果您自己需要<f:param>,则可以使用<h:commandLink>代替。

<h:commandLink>
    <f:ajax event="click" listener="{bean.clickFlight(searchResult)}" />
    <f:param name="lfi" value="#{searchResult.index}" />

    <h:panelGroup>
        <!-- I get some info here from the searchResult object -->
    </h:panelGroup>
</h:commandLink>