如何以编程方式添加带有primefaces的对话框

时间:2011-12-30 17:43:21

标签: jsf xhtml primefaces

我想通过primefaces datalist组件显示一些数据。为了实现这一点,我有一个像ArrayList<Person>这样的arrayList。

人类看起来像这样

class Person{
    private String name;
    private String age;
    private ArrayList<String> hobbies;
}

要显示我使用以下代码的数据:

<p:dataList value="{gameBean.persons}" var="person" itemType="disc">  
    Name: #{person.getName()}, Age: #{person.getAge()}, 
    <h:link value="Hobbies" onclick="dlg1.show();" />
</p:dataList>

我现在要做的是创建一个链接,在点击时打开一个对话框:

 <p:dialog header="Hobbies" widgetVar="dlg1" modal="true"height="100">
    //iterate through hobbies list to print it 
 </p:dialog>

到目前为止,这是有效的,因为我已经在xhtml文件中硬编码了如上所述的对话框。

这种方法当然不适用于动态数量的人,因为我无法对对话框和链接进行硬编码。我的问题是,如何以编程方式创建此对话框并将正确的widgetVar变量分配给链接的onClick方法?

任何帮助都是高度关注的, 欢呼尼古拉斯

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

<h:form id="form">
    <p:dataList value="{gameBean.persons}" var="person" itemType="disc">  
        Name: #{person.getName()}, Age: #{person.getAge()}, 
        <p:column>
            <p:commandLink value="Hobbies" actionListener="#{gameBean.onPersonSelect(person)}" 
                       oncomplete="dlg1.show();" update=":form:hobbiesDlg" />
        </p:column>
    </p:dataList>

    <p:dialog header="Hobbies" id="hobbiesDlg" widgetVar="dlg1" modal="true"height="100">
        //iterate through hobbies of gameBean.person to show here
    </p:dialog>
</h:form>

@ManagedBean
@ViewScoped
public class GameBean {
   private Person person;

   public void onPersonSelect(Person person) {
      this.person = person;
   }
}