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