刷新JSF片段内的表

时间:2013-01-10 05:35:11

标签: jsf oracle-adf

我知道这很简单,但我似乎无法让它工作我知道如何使用部分触发但是由于某些未知的原因我似乎无法使它工作。好吧,我的问题是我在我的jsf片段中有<af:table>(我使用任务流来创建这个片段)我想要做的是在我的文本字段上使用valuechangelistener创建一个简单的搜索方法,这样表就会被搜索对于在文本字段上发生的每一个变化,问题是<af:table partialTrigger=":id of my textfield">似乎无法正常工作它保留表中的旧值,它不是令人耳目一新的,或者你有任何解决这类问题的方法。为了说清楚,我会发布一些代码。

JSF Fragment Page:

<?xml version='1.0' encoding='UTF-8'?>
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
                xmlns:f="http://java.sun.com/jsf/core">
  <af:panelStretchLayout id="psl1" inlineStyle="width: 900px;">
    <f:facet name="center">
      <af:panelGroupLayout layout="scroll" id="pgl3">
        <af:panelGridLayout id="pgl1">
          <af:gridRow marginTop="5px" marginBottom="5px" height="auto" id="gr1">
            <af:gridCell marginStart="10px" width="100px" id="gc1" halign="end" valign="middle">
              <af:outputLabel value="Search: " id="ol1" inlineStyle="color:Black; font-size:12px; font-weight:bold;"/>
            </af:gridCell>
            <af:gridCell marginStart="10px" width="250px" id="gc2" halign="start" valign="middle">
              <af:inputText label=" " valueChangeListener="#{personnelFragment.SearchRecords}" autoSubmit="true" columns="40" id="searchTxt"/>
            </af:gridCell>
            <af:gridCell marginStart="10px" width="100px" id="gc3" halign="end" valign="middle">
              <af:outputLabel value="Sort By: " id="ol2" inlineStyle="color:Black; font-size:12px; font-weight:bold;"/>
            </af:gridCell>
            <af:gridCell marginStart="10px" marginEnd="5px" width="25%" id="gc4">
              <af:selectOneChoice label=" " id="soc1">
                <af:selectItem label="Firstname" id="si1"/>
                <af:selectItem label="Middlename" id="si2"/>
                <af:selectItem label="Lastname" id="si3"/>
              </af:selectOneChoice>
            </af:gridCell>
          </af:gridRow>
        </af:panelGridLayout>


        <af:table width="700px" partialTriggers=":searchTxt" id="t1" value="#{personnelFragment.personnelInfoData}" var="PersonnelData"
        horizontalGridVisible="true" verticalGridVisible="true" inlineStyle="margin: 10px 0 10px 0;"
        rowSelection="single">
            <af:column headerText="Prefix" align="center" id="c4">
                <af:outputLabel value="#{PersonnelData.prefix}" id="ol6"
                                inlineStyle="color:Black; font-size:10px;"/>
            </af:column>

            <af:column headerText="Firstname" align="center" id="c1">
                <af:outputLabel value="#{PersonnelData.firstName}" id="ol3"
                                inlineStyle="color:Black; font-size:10px;"/>
            </af:column>

            <af:column headerText="Middlename" align="center" id="c2">
                <af:outputLabel value="#{PersonnelData.middleName}" id="ol4"
                                inlineStyle="color:Black; font-size:10px;"/>
            </af:column>

            <af:column headerText="Lastname" align="center" id="c3">
                <af:outputLabel value="#{PersonnelData.lastName}" id="ol5"
                                inlineStyle="color:Black; font-size:10px;"/>
            </af:column>

            <af:column headerText="Suffix" align="center" id="c5">
                <af:outputLabel value="#{PersonnelData.suffix}" id="ol7"
                                inlineStyle="color:Black; font-size:10px;"/>
            </af:column>

            <af:column headerText=" " align="center" id="c6">
                <af:commandImageLink id="cil1" icon="#{resource['images:check.png']}" actionListener="#{personnelFragment.SearchPersonnelInfo}" />
            </af:column>
        </af:table>

  </af:panelGroupLayout>
</f:facet>
<f:facet name="top"/>

我的Bean(Value Change Listener),但我只是粘贴重要部分:

        calState = (OracleCallableStatement)con.prepareCall("{ call SEARCH_PERSONNELINFO(?, ?) }");
    calState.setObject(1, e.getNewValue());
    calState.registerOutParameter(2, OracleTypes.CURSOR);
    calState.execute();
    rs = (ResultSet)calState.getObject(2);
    while(rs.next()){
        PersonnelInfoData.add(new GetPersonnelData(rs.getInt(1), rs.getString(2), rs.getString(3),
                                rs.getString(4), rs.getString(5), rs.getString(6)));
        System.out.println(rs.getInt(1) +" "+ rs.getString(2));

    }
    calState.close();

我使用存储过程此代码正常工作我很好,因为你可以看到我将样本结果打印到日志并正常工作。我的问题只是刷新页面。

1)。 partialTrigger只会在有<af:form>标签的情况下发生吗?(因为jsf片段不支持<af:form>) 2)我刚才搜索,在一些论坛中,他们以编程方式创建触发器AdfFacesContext.getCurrentInstance().addPartialTarget(Component);你可以向我解释一下这段代码的用途吗? 3)如何刷新jsf片段中的表?

非常感谢帮助和指导。

2 个答案:

答案 0 :(得分:0)

尝试使用以下行来手动刷新辅助bean中的表: 。AdfFacesContext.getCurrentInstance()addPartialTarget(T1);

答案 1 :(得分:0)

1)af:form标签位于jsp / jspx页面中,您放置了片段/任务流(您可以检查它)。 2)与partialTrigger属性相同,但不使用ID,而是使用bean中定义的绑定 3)就像你说的那样,使用partialTrigger =“你的组件的id”。

由于您使用bean来显示数据,您可能需要检查迭代器上的缓存(检查绑定,选择迭代器,检查属性)。