2012-02-15 59 views
2

我在推广基于ID的下拉值方面存在问题。如何填充和预选h:selectOneMenu?

查看:

<h:selectOneMenu id="dropDown" value="#{sampleVo.dropDownType}" "> 
    <f:selectItem itemValue="Select Value" itemLabel="Select Value" /> 
    <f:selectItems value="#{sampleService.dropDownList}" /> 
</h:selectOneMenu> 

SampleVo

public class SampleVo implements Serializable { 

    private String dropDownType; 

    // getters and setters 
} 

SampleService

public class SampleServiceImpl implements SampleService { 

    private List<SampleVo> listOfSampleVo; 
    private List<String> dropDownList; 

    public void onLoad() { 
     dropDownFunction(); 
    } 

    public void dropDownFunction() { 
     if (dropDownList == null) { 
      dropDownList = new ArrayList<String>(); 
      dropDownList.add("ONE"); 
      dropDownList.add("TWO"); 
      dropDownList.add("THREE"); 
     } 
    } 

} 

DB结构:

SAMPLE_ID  SAMPLE_DESCRIPTION 
     1     ONE 
     2     TWO 
     3     THREE 

在页面加载过程中,所有三个下拉值都将使用默认的“选择值”填充为第一个选项。下拉值被映射到数据库,带有样本ID。如果DB中存在记录(即样本ID = 2,样本描述= TWO),我想根据ID显示两个下拉列表。我怎样才能做到这一点?

+0

所以...你有什么实际问题?你有没有描述它,我还没有看到它?你有任何错误或任何? – tartak 2012-02-15 08:31:42

+0

如果用户从下拉列表中选择THREE,我需要在Sample ID列中保存3个 – 2012-02-15 08:37:19

回答

0
public class SampleVO { 
    private int value; 
    private String name; 
    //getter & setter 
} 

在你的XHTML

<f:selectItems value="#{sampleService.dropDownList}" var="v" itemLabel="#{v.name}" itemValue="#{v.value}"/> 
0

好吧,我想你需要一个自定义的转换器

你可以看看here

检查符getAsString()和的getAsObject实现( )并根据您的需要进行定制。

提示。 getAsString应该返回TWO,并且getAsObject应该返回整个SampleVO对象。

乐:@Pablo你是对的。他需要太

1

相反的下拉列表作为一个字符串列表,使它成为一个SelectItem列表。您可以通过这种方式独立设置值和标签。

0

根据你的问题,当你的页面被加载时,你是否想要默认选择的值是(样本id = 2,样本描述= TWO)。所以你应该在你的“dropDownType”变量中初始化这个值。你的xhtml是错的。如果你使用了f:selectItems标签,你应该删除f:selectItem标签。

0

变化dropDownFunction() 使它成为一个列表

public List<SelectItem> dropDownItems() { 
    ArrayList<SelectItem> items = new ArrayList<SelectItem>(); 
    items.add(new SelectItem(1,"ONE"); 
    items.add(new SelectItem(2,"TWO"); 
    items.add(new SelectItem(3,"TREE"); 
} 

,并更改dropDownType键入整数