首先,我是Java EE的新手,来自强大的ASP .NET开发背景.我已经浏览了网络,我可能会错过这个,但似乎没有关于如何将支持bean类连接到JSF组件的简单直接的教程.
一个很好的例子是这样的,目前我正在尝试创建一个JSF页面,其中有一组链接作为菜单栏和一组表单.我打算做的是,当点击一个链接时,将呈现一个特定的表单.
在ASP.NET中,我可以轻松检索元素,然后将属性设置为可显示.我想知道在JSF中是否有简单的方法(哎呀,甚至任何方式).
表单已经在页面中,只需在单击特定链接时将"render"属性设置为true即可.
所以我找到了一些接近这个的答案,我发现足以解决我遇到的问题.但即使这样,我也很好奇了解这方面的运作方式.让我用一个例子来说明:
我有一个.xhtml看起来像这样(缩短)的facelet 页面.
<h:form id="resultForm">
<h:panelGroup class="search_form" layout="block">
<h:inputText id="lastname" value="#{search.lastname}"/>
<h:commandButton action="#{search.find}" value="Find">
<f:ajax execute="lastname" render="resultDisplay"/>
</h:commandButton>
</h:panelGroup>
<h:dataTable value="#{search.searchResults}" var="results" id="resultDisplay"
rendered="#{!empty search.searchResults}">
<h:column>
#{results.field}
</h:column>
</h:dataTable>
</h:form>
Run Code Online (Sandbox Code Playgroud)
现在,为了突破性,我不会发布所有的支持bean代码,但我有这样的东西:
public void find() {
searchResults = setResults(true);
}
Run Code Online (Sandbox Code Playgroud)
哪里searchResults是ArrayList<Objects>.在搜索之后,它不是null - 在多个测试中检查(可以为null,但不在我正在进行的测试中).
现在.这不起作用.
但是,如果我将dataTable内部嵌套在另一个内部panelGroup,那么它会起作用.
<h:panelGroup id="resultDisplay">
<h:dataTable value="#{search.searchResults}" var="results"
rendered="#{!empty search.searchResults}">
<h:column>
#{results.field}
</h:column>
</h:dataTable>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
现在,这种变化可以让一切正常.我对此感到满意......但我想我也在寻求一些理解.有关为什么我必须嵌套这些组件的任何见解?我肯定错过了一些东西!
我想创建一个JSF注册表单,其中包含所有国家/地区列表的选择菜单.我知道这很容易用Java实现,HashMap但是我不知道如何实现的棘手部分是用户从列表中选择他的国家后,第二个选择菜单与他所在国家/地区的城市一起出现?有什么有用的例子吗?
最好的祝愿.