如何在 jsf 中填充页面加载的下拉列表?
我是 JSF 新手,我阅读了 JSF 生命周期,但不明白如何实现这一点?
我有一个控制器说“城市”,其他控制器说“国家”。现在我将创建一个新页面,在其中提供搜索功能。我在该页面上显示了两个下拉菜单(一个用于国家/地区,另一个用于城市),我希望在页面加载时填充第一个下拉菜单。请告诉我使用哪个控制器?城市/国家?或者创建一个新的?以及如何在页面加载时加载数据?
谢谢!
I'm new to JSF, I read the JSF life cycle but couldn't understand how to achieve this?
I've a controller say "Cities" and other controller "Countries". Now I'm going to create a new page, where I will provide search functionality. I showed two dropdowns on that page (One for countries and other for cities), I want the first drop down to be populated on page load. Please tell me which controller to use? Cities/Countries? or create a new one? and How to load data on page load?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
每个人都是正确的,您需要使用
示例:
.Xhtml
Bean
不要在“get”方法中填充列表,因为 JSF 会多次调用它,并且它会毁了你的表现。
Everyone is correct, you need to use
<f:selectItems/>
Example:
.Xhtml
Bean
Do not populate the list in a "get" method, because JSF will call it more than once and it will kill your performance.
最好为包含国家和城市集合的页面使用一个控制器。
要在页面加载时加载国家/地区,您应该创建一个用 @Postconstruct 注释的方法。
在此方法中,您将进行初始化。 IE
It is preferable to use one controller for the page which will hold collections of Countries and Cities.
To load the countries on page load you should create a method annotated with @Postconstruct.
In this method you do your initialization. i.e.
国家/地区很可能是一个静态集合,因此您只需使用包含国家/地区(键国家/地区名称、值国家/地区代码)的静态 Map 创建一个应用程序范围的 bean。
然后只需将您的
绑定到需要国家/地区下拉列表的每个视图中即可。(顺便说一句,此解决方案归功于 BalusC ;))
Countries is most likely a static collection, so you can just create an application scoped bean with a static Map that holds the countries (key country name, value country code).
Then simply bind your
<f:selectItems>
in every view that needs a country drop-down to that.(credits to BalusC btw for this solution ;))
在您的控制器中,您需要 getter
public List; getFirmaTyp()
然后在你看来你应该有类似下一个的东西。每次显示页面时都会调用 Getter。在我的示例中,在回发时,dropDown 的 id 设置为实体公司类型和 id,如 yourController.firma.typ.id
In your controller you need getter
public List<SelectItem> getFirmaTyp()
and then in your view you should have something like next.Getters are called everytime the page is displayed. In my example On postback the id for dropDown is set to entity firm type and id like yourController.firma.typ.id