首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式生成primefaces PickList组件?

如何以编程方式生成primefaces PickList组件?
EN

Stack Overflow用户
提问于 2020-02-13 11:36:52
回答 2查看 191关注 0票数 0
代码语言:javascript
复制
public void populateForm(ComponentSystemEvent event) {
    HtmlForm form = (HtmlForm) event.getComponent();

    List<String> citiesSource = new ArrayList<String>();
    List<String> citiesTarget = new ArrayList<String>();
    citiesSource.add("San Francisco");
    citiesSource.add("London");
    citiesSource.add("Paris");
    citiesSource.add("Istanbul");
    citiesSource.add("Berlin");
    citiesSource.add("Barcelona");
    citiesSource.add("Rome");

    cities = new DualListModel<String>(citiesSource, citiesTarget);

    PickList pickList = new PickList();
    pickList.setId("pickList");
    pickList.setValue(cities);
    pickList.setVar("cities");
    pickList.setItemLabel(pickList.getVar());
    pickList.setItemValue(cities);

     form.getChildren().add(pickList);
}

这是我的方法,我得到的输出是:

但是,如果我将<p:pickList id="pickList" value="#{bean.cities}" var="cities" itemLabel="#{cities}" itemValue="#{cities}" />添加到xhtml中,就会得到以下输出:

这里发生什么事情?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-14 10:21:32

我就是这样解决PickList问题的:

代码语言:javascript
复制
FacesContext context = FacesContext.getCurrentInstance();
ExpressionFactory ef = context.getApplication().getExpressionFactory();

PickList pickList = new PickList();

ValueExpression pickListValue = ef.createValueExpression(
    context.getELContext(), "#{ruleManagedBean.cities}",DualListModel.class);

ValueExpression pickListVar = ef.createValueExpression(
            context.getELContext(), "cities", String.class);

ValueExpression pickListItemLabel = ef.createValueExpression(
            context.getELContext(), "#{cities}", String.class);

ValueExpression pickListItemValue = ef.createValueExpression(
            context.getELContext(), "#{cities}", String.class);

pickList.setId("pickList");
pickList.setValueExpression("value", pickListValue);
pickList.setValueExpression("var", pickListVar);
pickList.setValueExpression("itemLabel", pickListItemLabel);
pickList.setValueExpression("itemValue", pickListItemValue);

form.getChildren().add(pickList);

注意: ruleManagedBean.cities引用DualListModel,填充为

代码语言:javascript
复制
List<String> citiesSource = new ArrayList<String>();
List<String> citiesTarget = new ArrayList<String>();
citiesSource.add("San Francisco");
citiesSource.add("London");
citiesSource.add("Paris");
citiesSource.add("Istanbul");
citiesSource.add("Berlin");
citiesSource.add("Barcelona");
citiesSource.add("Rome");

cities.setSource(citiesSource);
cities.setTarget(citiesTarget);

确保您已经全局声明了这个DualListModel,如下所示,并且有getter setter方法

代码语言:javascript
复制
private DualListModel<String> cities = new DualListModel<String>();
票数 0
EN

Stack Overflow用户

发布于 2020-02-13 15:05:44

PickList pickList = new PickList();不同,请尝试如下:

代码语言:javascript
复制
Application application = FacesContext.getCurrentInstance().getApplication();
PickList pickList = (PickList) application.createComponent(PickList.COMPONENT_TYPE);

为此更改您的pickList.setValue(cities);

注意:城市必须是您的bean上的一个字段,它具有自己的getter。

代码语言:javascript
复制
ExpressionFactory ef = application.getExpressionFactory();
ELContext elc = FacesContext.getCurrentInstance().getELContext();
ValueExpression value = ef.createValueExpression(elc, "#{bean.cities}", DualListModel.class);
pickList.setValueExpression("value", value);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60206910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档