如何在 jsf 中填充页面加载的下拉列表?

发布于 2024-10-14 10:46:58 字数 206 浏览 2 评论 0原文

我是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

莫多说 2024-10-21 10:46:58

每个人都是正确的,您需要使用

示例:

.Xhtml

<h:selectOneMenu>
    <f:selectItems value="#{myController.listItems}"/>
</h:selectOneMenu>

Bean

public class MyController{
    //The list with the items
    private List<SelectItem> listItems = null;

    public MyController {
        loadCombo();
    }

    (...)

    //Loading the items
    private void loadCombo() {
        listItems = new ArrayList<SelectItem>();

        //You can do with BD data using a for. How to add a new item:
        //listItems.add(new SelectItem("itemValue", "itemLabel"));

        listItems.add(new SelectItem("1", "Item 1"));
        listItems.add(new SelectItem("2", "Item 2"));
        listItems.add(new SelectItem("3", "Item 3"));
        listItems.add(new SelectItem("4", "Item 4"));
    }

    (...)

    //Getters and setters
}

不要在“get”方法中填充列表,因为 JSF 会多次调用它,并且它会毁了你的表现。

Everyone is correct, you need to use <f:selectItems/>

Example:

.Xhtml

<h:selectOneMenu>
    <f:selectItems value="#{myController.listItems}"/>
</h:selectOneMenu>

Bean

public class MyController{
    //The list with the items
    private List<SelectItem> listItems = null;

    public MyController {
        loadCombo();
    }

    (...)

    //Loading the items
    private void loadCombo() {
        listItems = new ArrayList<SelectItem>();

        //You can do with BD data using a for. How to add a new item:
        //listItems.add(new SelectItem("itemValue", "itemLabel"));

        listItems.add(new SelectItem("1", "Item 1"));
        listItems.add(new SelectItem("2", "Item 2"));
        listItems.add(new SelectItem("3", "Item 3"));
        listItems.add(new SelectItem("4", "Item 4"));
    }

    (...)

    //Getters and setters
}

Do not populate the list in a "get" method, because JSF will call it more than once and it will kill your performance.

终陌 2024-10-21 10:46:58

最好为包含国家和城市集合的页面使用一个控制器。
要在页面加载时加载国家/地区,您应该创建一个用 @Postconstruct 注释的方法。
在此方法中,您将进行初始化。 IE

@PostConstruct
public void init(){
     //do your initialization
}

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.

@PostConstruct
public void init(){
     //do your initialization
}
灯角 2024-10-21 10:46:58

国家/地区很可能是一个静态集合,因此您只需使用包含国家/地区(键国家/地区名称、值国家/地区代码)的静态 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 ;))

箜明 2024-10-21 10:46:58

在您的控制器中,您需要 getter public List; getFirmaTyp() 然后在你看来你应该有类似下一个的东西。

<h:selectOneMenu value="#{yourController.firma.typ.id}">
   <f:selectItems value="#{yourController.firmaTyp}" />
</h:selectOneMenu>

每次显示页面时都会调用 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.

<h:selectOneMenu value="#{yourController.firma.typ.id}">
   <f:selectItems value="#{yourController.firmaTyp}" />
</h:selectOneMenu>

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文