我正在学习一些 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>
编辑:
我已经解决了我的问题,但我不知道我的方式是否是做这件事的最佳方式。因此,我将保留这个问题并等待一个解释更好的方法的答案(对于需要类似功能的未来用户)。当发布一个好的答案时,我会给出最好的答案。
注意:我翻译了变量名,如果我忘记了什么,很抱歉。