0

我在我的项目中使用 PrimeFaces 的 pickList 组件。但问题是永远不会调用动作函数。

<p:pickList id="pickList" value="#{pickListBean.names}" var="name"
    itemLabel="#{name}itemValue="#{name}" />
<p:commandButton ajax="false" id="submit" value="Submit" type="submit"
    action="#{pickListBean.performAction}" />

我的托管 bean 如下所示:

@ManagedBean(name="pickListBean")
@SessionScoped
public class PickListBean {
private DualListModel<String> names;
private List<String> nam1;
private List<String> nam2;

public PickListBean() {
    nam1 = new ArrayList<String>();
    nam2 = new ArrayList<String>();

    nam1.add("Ammar");
    nam1.add("Nisar");
    nam1.add("Khalid");
    nam1.add("Haris");
    nam1.add("Yasir");

    names = new DualListModel<String>(nam1, nam2);
}

public DualListModel<Player> getPlayers() {
    return players;
}
public void setPlayers(DualListModel<Player> players) {
    this.players = players;
}

public DualListModel<String> getNames() {
    return names;
}
public void setNames(DualListModel<String> names) {
    this.names = names;
}

public String performAction()
{
    for (Iterator iterator = nam2.iterator(); iterator.hasNext();) {
        String name = (String) iterator.next();
        System.out.print("\t" + name);
    }
    return "";
}

}

我会感谢你的帮助。

4

3 回答 3

0

首先,选择列表和命令按钮是否嵌套在表单中?检查操作是否有效,将 println 退出 for 循环,因为您可能永远不会到达那里

公共字符串执行操作(){

    System.out.println("works");

}

于 2012-05-19T15:35:53.273 回答
0

那好吧!所以问题不在于您认为您的操作按钮有效,您想知道如何从双重列表中检索数据,我理解正确吗?如果是这样,那么要获得双重列表中的每个位置,您将必须

public void performAction(){
      String sor;
      String tar;
      sor=names.getSource().get(i);
      tar=names.getTarget().get(i);
      System.out.println("works"+sor+tar);

  }

其中 i 是列表中从上侧开始的当前位置数(因此,如果 i=0,您将获得每个列表的最高位置)使用简单的 for 循环,您可以迭代以获取所有条目。此外,如果您需要使用迭代器,我认为您可以使用 names.getSource().iterator() 和 getTarget() 相同。除了迭代器,我尝试了上述解决方案并且它有效,所以我希望它可以帮助你。

于 2012-05-22T10:23:54.460 回答
0

要获取选定的值,请使用 names.getTarget() 并获取选择列表。

于 2012-05-20T03:05:35.810 回答