我尝试在ComboBox上显示两个属性。我尝试了setItemCaptionPropertyId()
,但这只显示nome
,我想显示nome
和sobreNome
或更多属性。
我正在尝试这个。
//jpacontainer aluno
private CustomJPAContainer<Aluno> dsAluno = new CustomJPAContainer<Aluno>(Aluno.class);
//combobox aluno
ComboBox cbxAluno = (ComboBox)field;
cbxAluno.setItemCaptionMode(ItemCaptionMode.PROPERTY);
cbxAluno.setConverter(new SingleSelectConverter<Aluno>(cbxAluno));
cbxAluno.setImmediate(true);
cbxAluno.setContainerDataSource(dsAluno);
cbxAluno.setItemCaptionPropertyId("nome");
cbxAluno.setItemCaptionPropertyId("sobreNome");
cbxAluno.setWidth("10cm");
cbxAluno.addValueChangeListener(this);
tabAluno.addComponent(cbxAluno);
//bean
@Entity
public class Aluno implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@NotNull @NotEmpty @Size(min=3, max=50)
private String nome;
@NotNull @NotEmpty @Size(min=3, max=50)
private String sobreNome;
}
我该怎么办?
**我解决了问题**
我创建了一个名为caption
的新属性,并连接了我想要的字符串。
创建一个返回标题值的getCaption()之后;
解决方案。
@Transient
private String caption;
public String getCaption(){
caption = nome + " " + sobreNome;
return caption;
}
cbxAluno.setItemCaptionPropertyId("caption");
现在有效。!
答案 0 :(得分:2)
我可能会说一些完全愚蠢的事情,但您是否尝试在班级toString
中实施方法Aluno
?
答案 1 :(得分:0)
有人可能会创建一个级联组合框,您可以在其中选择Nome,并使用&#34; sobreNome&#34;填充第二个组合框。或者你必须将Nome和SobreNome的所有值连在一起。
答案 2 :(得分:0)
如果您可以使用自定义ComboBox,那么您可以这样做:
public class MyComboBox extends ComboBox {
private static final long serialVersionUID = 1L;
private List<String> myPropIds = Collections.emptyList();
@Override
public void setItemCaptionPropertyId(Object propId) {
myPropIds = Arrays.asList(((String)propId).split(","));
}
@Override
public String getItemCaption( Object itemId ) {
StringBuilder sb = new StringBuilder();
String delimiter = "";
for (String propId : myPropIds) {
Property<?> p = getContainerProperty(itemId, propId);
sb.append(delimiter).append(getMyCaption(p));
delimiter = " ";
}
return sb.toString();
}
private String getMyCaption(Property<?> p) {
String caption = null;
if (p != null) {
Object value = p.getValue();
if (value != null) {
caption = value.toString();
}
}
return caption != null ? caption : "";
}
}
用法:
ComboBox cb = new MyComboBox();
cb.setItemCaptionPropertyId("nome,sobreNome");
//...