0

我正在学习一些 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”,它将使用匹配的学科更新学科列表(与 DB 的连接是ok)。之后,我希望通过 Ajax 重新渲染“myTable”并获得匹配的结果,而无需重新加载页面。

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>

编辑:

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

注意:我翻译了变量名,如果我忘记了什么,很抱歉。

4

0 回答 0