我需要一个带字符串值的自动填充功能,因为用户不能通过自动填充方法限制提供的项目,但他们应该能够在搜索字段中编写任何内容。如果他们想要,他们也可以从建议中选择。
现在我总是得到 /archive/overview.xhtml @ 28,57 itemLabel ="#{item.name}":类' java.lang.String'没有属性'名称'
XHTML:
private String searchString; // + getter and setter
public List<ArchiveAutoCompleteDto> autocomplete(String query) {
// get and return from lucene index/database
}
豆:
def parse_to_words(line)line.split ' '
end
line = "1. Command id = 22 Time = 2:30 <br> 2. Command id = 23 Time = 3:30"
words = parse_to_words line
output= words[0] +
" http://localhost:3000/command_id=" +
words[4] +
"/home Time = " +
words[7] +
" <br> " +
words[9] +
" http://localhost:3000/command_id=" +
words[13] +
"/home Time = " +
words[16]
有没有办法实现这个(Primefaces 5.2)?
谢谢!
答案 0 :(得分:5)
itemValue
中的 p:autocomplete
属性可以在简单的情况下用作转换器的轻量级替换(这基本上意味着您无法执行update="@form"
或类似的)
所以基本上有3种情况:
将attributue var
设置为某个表达式是必需的,以启用&#34; pojo模式&#34;在PrimeFaces。
<p:autoComplete
value="#{backingBean.myPojo}"
completeMethod="#{backingBean.autocomplete}
var="pojo" itemLabel="#{pojo.label}"
itemValue="#{pojo}" converter="pojoConverter">
</p:autoComplete>
在这种情况下,var="pojo"
是A类的实例。value="#backingBean.myPojo}"
是A类型的变量。itemValue="#{pojo}"
在您要求建议列表时进行评估,结果传递给转换器通过getAsString
生成要在html中编码的值(例如:v1
)
当你从列表中选择一个元素时(例如:v1
),它会被传递回转换器getAsObject
,它会返回一个在支持bean中设置的类型为A的对象。像往常一样,转换器负责将Pojo转换为HTML值,反之亦然。
public interface Converter {
// @return *K* the value to be used in html
// @param obj is provided by the expression (itemValue="#{pojo}")
public String getAsString(FacesContext context, UIComponent component, Object obj);
// build the pojo identified by String *K*
// @param value *K*
public Object getAsObject(FacesContext context, UIComponent component, String value);
}
在这种情况下,你有一个带有String字段的pojo,用于提取和在backing bean中使用。
<p:autoComplete value="#{backingBean.myStringValue}"
completeMethod="#{backingBean.autocomplete}
var="pojo" itemLabel="#{pojo.label}"
itemValue="#{pojo.stringKey}">
</p:autoComplete>
流程相同,但
Converter#getAsString
生成的)并在选中后设置为"#{backingBean.myStringValue}"
。"#{backingBean.myStringValue}"
必须是字符串。一切正常,直到您尝试执行刷新p:autoComplete
窗口小部件(例如update =&#34; @ form&#34;)。 Primefaces使用来自支持bean的值(即String)重新评估itemLabel
(因为某种原因,它不会将itemLabel存储在ViewState中)。因此,您会收到错误。实际上,没有解决这个问题的方法,而是提供一个实现,如案例1)。
此处未涉及。