<h:inputText value="#{BackingBean.firstString}" />
<h:inputText value="#{BackingBean.secondString}" />
<rich:inplaceSelect value="#{BackingBean.myText}" defaultLabel="select">
<f:selectItems value="#{???}" />
</rich:inplaceSelect>
private List<MyText> myText;
private String firstString;
private String secondString;
private String id
private String desc
private String text
我想在inplaceSelect中从列表中选择一个MyText我只想显示MyText的一个字段。什么是实现它的最佳方法?
答案 0 :(得分:1)
首先,您需要Converter
在MyText
和String
之间进行转换。根据您的问题历史记录,我了解您正在使用JSF 1.2,因此我将提供针对JSF 1.2的目标答案。
Converter
应该基本看起来像这样(这只是一个例子,请阅读评论你应该如何实现它):
public class MyTextConverter implements Converter {
public String getAsString(FacesContext context, UIComponent component, Object value) {
// Write code here to convert MyText to its unique String representation.
return String.valueOf(((MyText) value).getId());
}
public Object getAsObject(FacesContext context, UIComponent component, String value) {
// Write code here to convert unique String representation of MyText to MyText object.
return myTextService.find(Long.valueOf(value));
}
}
在faces-config.xml
:
<converter>
<converter-for-class>com.example.model.MyText</converter-for-class>
<converter-class>com.example.converter.MyTextConverter</converter-class>
</converter>
然后您可以按如下方式使用输入:
<rich:inplaceSelect value="#{bean.myText}" defaultLabel="select">
<f:selectItems value="#{bean.myTextItems}" />
</rich:inplaceSelect>
与
private MyText myText;
private List<SelectItem> myTextItems;
@PostConstruct
public void init() {
myTextItems = new ArrayList<SelectItem>();
for (MyText myText : myTextService.list()) {
myTextItems.add(new SelectItem(myText, myText.getText()));
}
}
// ...
答案 1 :(得分:0)
在你的支持bean中,因为你有<rich:inplaceSelect value="#{backingBean.myText}"
,所以改变
private List<MyText> myText;
到
private MyText myText;
并在backing-bean中添加SelectItem
的列表:
private List<SelectItem> selItems;
然后您可以在构造函数中使用SelectItem
填充该列表,也可以使用(@PostConstruct)填充方法。
您可以使用构造函数SelectItem(Object value, String label)
。
selItems.add(new SelectItem(myTextObj, myTextObj.text)); //or id or desc instead of text
//...
然后在视图中:
<f:selectItems value="#{backingBean.selItems}" />
答案 2 :(得分:0)
<f:selectItems
value="#{BackingBean.myTextID}"
var="value"
itemLabel="#{value.desc}"
itemValue="#{item.id}"
/>
或您需要作为项目标签/值的任何属性。需要JSF 2。