InputText上的调用方法和reRender数据表更改

时间:2013-10-15 13:18:23

标签: jsf jsf-2 datatable

我正在学习一些JSF,我想知道一些事情。我已经在Google,Stack Overflow和Mkyong等着名网站上搜索了很多内容,但我找不到解决方案。

实际上我在同一页面中有一个输入文字和一个DataTable。代码看起来像这样:

<h:form>
    <h:inputText id="discipline" 
    value="#{disciplineMBean.name}" 
    valueChangeListener="#{disciplineMBean.updateList}">
       <f:ajax event="keyup" reRender="myTable"/>  
    </h:inputText>
    <h:commandButton value="Add" action="#{disciplineMBean.create}">
    </h:commandButton>
</h:form>

<h:form>
    <h:dataTable id="myTable" var="disciplina" 
    value="#{disciplinaMBean.disciplineList}">

        <h:column>
            <f:facet name="header">Name</f:facet>       
            <h:outputText value="#{discipline.name}" />
        </h:column>

    </h:dataTable>
</h:form>

我想要的是:当inputText值改变时,我想调用方法“updateList”,它将使用匹配的学科更新discipList(与DB的连接是ok )。之后,我希望reRender“myTable”具有匹配的结果 - 通过Ajax,无需重新加载页面。

public void updateList(){
    if( getName() != null && getName().length() > 0){
        this.setDisciplineList( <working_connection_with_db_sending_getName()> );
    }else{
        this.setDisciplineList( <working_connection_with_db_all_results> );
    }   
}

总结一下,我希望当用户在输入字段中键入内容时,学科列表会根据匹配的学科进行更新 - 所有内容都没有页面重新加载,当用户更改输入字段时,表格会根据匹配的学科实时更新。

我可以做那样的事情吗?

<h:inputText id="discipline" value="#{disciplineMBean.name}">
    <f:ajax event="keyup" action="#{disciplineMBean.updateList}" reRender="myTable" />
</h:inputText>

编辑:

我已经解决了我的问题,但我不知道我的方式是否是做这件事的最佳方法。因此,我将打开这个问题并等待一个答案,解释一个更好的方法(对于需要类似功能的未来用户)。如果发布一个好的答案,我会给出最好的答案。

注意:我翻译了变量名称,对不起,如果我忘记了什么。

0 个答案:

没有答案