getAsString 方法对象的 Primefaces autoComplete 参数在我的转换器中为 null
Primefaces autoComplete parameter of getAsString method Object is null inside of my converter
我正在从 Icefaces selectInputText 迁移到 Primefaces autoComplete 组件。
<ice:selectInputText styleClass="adminAppUserSelect"
id="searchUser" value="#{appUserData.selectedUserName }" rows="50"
width="100%" listVar="userList"
valueChangeListener="#{appUserData.updateListUser}"
binding="#{appUserData.userAutoComplete}"
title="#{msg.WEB_ADMIN_PAGES_APPUSER_AUTOCOMPLETE}"
listValue="#{appUserData.matchesListUser}">
<f:facet name="selectInputText" >
<ice:panelGrid columns="3" width="400px" columnClasses="width20,width40,width40">
<ice:outputText
value="#{userList.iappuserId}" />
<ice:outputText
value="#{userList.cappuserName}" />
<ice:outputText
value="#{userList.cappuserDesc}" />
</ice:panelGrid>
</f:facet>
</ice:selectInputText>
我正在使用 Primefaces 5.3.5 和 JSF 2.2.8。
我在 Icefaces 1.2 中看到与旧版本相同数量的自动完成结果,但我看不到用户详细信息。我在每行的第一个单元格中只看到数字 0。
<p:autoComplete id="searchUser" styleClass="adminAppUserSelect" value="#{appUserData.selectedUserName}"
maxResults="50" var="appUser" completeMethod="#{appUserData.completeUserList}"
binding="#{appUserData.userAutoComplete}" title="#{msg.WEB_ADMIN_PAGES_APPUSER_AUTOCOMPLETE}"
itemValue="#{appUser}" itemLabel="#{appUser.cappuserName}" converter="appUserConverter">
<!--<p:ajax event="itemSelect" listener="#{appUserData.updateListUser}"/>-->
<p:column>
<h:outputText value="#{appUser.iappuserId}" />
</p:column>
<p:column>
<h:outputText value="#{appUser.cappuserName}" />
</p:column>
<p:column>
<h:outputText value="#{appUser.cappuserDesc}" />
</p:column>
</p:autoComplete>
我不确定我的转换器看起来像
@FacesConverter("appUserConverter")
public class AppUserConverter 实现转换器{
private int i;
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
...
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object object) {
if(object == null)
return null;
else{
return ((VAppuser) object).getCappuserName();
}
}
}
my result of autoComplete component
你能告诉我吗,请问我做错了什么?
更新:
我看到 value(data-item-value) 已正确设置,但 label(data-item-label) 尚未设置。
已添加
我在调试代码时注意到项目
if(items != null) {
for(Object item : items) {
已正确分配给从 completeMethod 获得的列表,但 ac.getItemValue() 在此行传递具有空属性的对象
String value = converter == null ? (String) ac.getItemValue() : converter.getAsString(context, ac, ac.getItemValue());
在 Primefaces AutoCompleteRenderer 中。
我删除
解决了
<bean id="appUser" class="model.admin.usermgmnt.VAppuser"
scope="session">
</bean>
来自我的应用程序上下文,因为自动完成组件不需要它。
我正在从 Icefaces selectInputText 迁移到 Primefaces autoComplete 组件。
<ice:selectInputText styleClass="adminAppUserSelect"
id="searchUser" value="#{appUserData.selectedUserName }" rows="50"
width="100%" listVar="userList"
valueChangeListener="#{appUserData.updateListUser}"
binding="#{appUserData.userAutoComplete}"
title="#{msg.WEB_ADMIN_PAGES_APPUSER_AUTOCOMPLETE}"
listValue="#{appUserData.matchesListUser}">
<f:facet name="selectInputText" >
<ice:panelGrid columns="3" width="400px" columnClasses="width20,width40,width40">
<ice:outputText
value="#{userList.iappuserId}" />
<ice:outputText
value="#{userList.cappuserName}" />
<ice:outputText
value="#{userList.cappuserDesc}" />
</ice:panelGrid>
</f:facet>
</ice:selectInputText>
我正在使用 Primefaces 5.3.5 和 JSF 2.2.8。 我在 Icefaces 1.2 中看到与旧版本相同数量的自动完成结果,但我看不到用户详细信息。我在每行的第一个单元格中只看到数字 0。
<p:autoComplete id="searchUser" styleClass="adminAppUserSelect" value="#{appUserData.selectedUserName}"
maxResults="50" var="appUser" completeMethod="#{appUserData.completeUserList}"
binding="#{appUserData.userAutoComplete}" title="#{msg.WEB_ADMIN_PAGES_APPUSER_AUTOCOMPLETE}"
itemValue="#{appUser}" itemLabel="#{appUser.cappuserName}" converter="appUserConverter">
<!--<p:ajax event="itemSelect" listener="#{appUserData.updateListUser}"/>-->
<p:column>
<h:outputText value="#{appUser.iappuserId}" />
</p:column>
<p:column>
<h:outputText value="#{appUser.cappuserName}" />
</p:column>
<p:column>
<h:outputText value="#{appUser.cappuserDesc}" />
</p:column>
</p:autoComplete>
我不确定我的转换器看起来像
@FacesConverter("appUserConverter")
public class AppUserConverter 实现转换器{
private int i;
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
...
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object object) {
if(object == null)
return null;
else{
return ((VAppuser) object).getCappuserName();
}
}
}
my result of autoComplete component
你能告诉我吗,请问我做错了什么?
更新: 我看到 value(data-item-value) 已正确设置,但 label(data-item-label) 尚未设置。
已添加 我在调试代码时注意到项目
if(items != null) {
for(Object item : items) {
已正确分配给从 completeMethod 获得的列表,但 ac.getItemValue() 在此行传递具有空属性的对象
String value = converter == null ? (String) ac.getItemValue() : converter.getAsString(context, ac, ac.getItemValue());
在 Primefaces AutoCompleteRenderer 中。
我删除
解决了<bean id="appUser" class="model.admin.usermgmnt.VAppuser"
scope="session">
</bean>
来自我的应用程序上下文,因为自动完成组件不需要它。