gpt4 book ai didi

java - SelectOneMenu 似乎改变了支持 bean 列表中的值

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:44 26 4
gpt4 key购买 nike

我在使用 glassfish 3.1.2 的 Myfaces 2.0.2 上使用 Primefaces 3.2。我已经在 Firefox 14.0.1 和 safari 5.1.7 中进行了测试,并且在两者中都收到了相同的行为。当我选择一个不是下拉列表中第一个的值并单击命令按钮时,所选项目似乎会替换列表中的第一个元素(请参阅下面的示例输出)。

我不应该在我的 bean 中使用直接列表来支持 selectOneMenu 吗?还是我做错了什么?

我创建了一个简单的测试用例来重现以下问题:

package com.example;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

@ManagedBean(name = "testBean")
@ViewScoped
public class TestBean implements Serializable
{
private List<ContainerObject> container;
private ContainerObject selectedContainerObject;

public TestBean()
{
container= new ArrayList<ContainerObject>();
}

@PostConstruct
public void initialize()
{
container.add(new ContainerObject("String 1"));
container.add(new ContainerObject("String 2"));
container.add(new ContainerObject("String 3"));
container.add(new ContainerObject("String 4"));
container.add(new ContainerObject("String 5"));
selectedContainerObject = container.get(0);
}

public List<ContainerObject> getContainer()
{
return container;
}

public ContainerObject getSelectedContainerObject()
{
return selectedContainerObject;
}

public void listContainer(ActionEvent event)
{
for(ContainerObject c : container)
System.out.println(c.getValue());
}

public class ContainerObject
{
String value;

public ContainerObject(String value)
{
this.value = value;
}

public String getValue()
{
return value;
}

public void setValue(String value)
{
this.value = value;
}
}
}

以下是我的xhtml。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<h:html
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">

<h:head>
</h:head>
<h:body>
<h:form id="container" enctype="multipart/form-data">
<p:selectOneMenu id="c" value="#{testBean.selectedContainerObject.value}">
<f:selectItems value="#{testBean.container}" var="container"
itemLabel="#{container.value}" itemValue="#{container.value}" />
</p:selectOneMenu>
<p:commandButton value="submit list"
actionListener="#{testBean.listContainer}"/>
</h:form>
</h:body>
</h:html>

以下是选择“String 3”并按下提交按钮后打印到控制台的结果。

INFO: String 3
INFO: String 2
INFO: String 3
INFO: String 4
INFO: String 5

但我希望看到

INFO: String 1
INFO: String 2
INFO: String 3
INFO: String 4
INFO: String 5

当我使用 h:selectOneMenu 时,我也会得到与使用 p:selectOneMenu 时相同的行为。

最佳答案

selectedContainerObject = container.get(0);

我认为这就是您出错的地方,您实际上将 selectOne 对象的 value 属性设置为列表本身的第一个元素,因此您选择的任何内容最终都会出现在列表的第一个元素中。

关于java - SelectOneMenu 似乎改变了支持 bean 列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com