当前位置: 首页 > 知识库问答 >
问题:

getAsString方法的自动完成参数对象在我的转换器内为空

云季萌
2023-03-14

我正在迁移从冰脸selectInputText到Primeface自动完成组件。

<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")

公共类AppUserConzer实现转换器{

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();
    }
}

}

我的自动完成组件的结果

你能告诉我我做错了什么吗?

更新:我看到值(数据项值)设置正确,但标签(数据项标签)尚未设置。

我在调试代码时注意到

if(items != null) {
        for(Object item : items) {

正确分配给从completeMethod获取的列表,但ac.getItemValue()会传递此行具有null属性的对象

String value = converter == null ? (String) ac.getItemValue() : converter.getAsString(context, ac, ac.getItemValue());

在Primefaces自动补全器中。

共有1个答案

白哲茂
2023-03-14

我通过移除

<bean id="appUser" class="model.admin.usermgmnt.VAppuser"
      scope="session">
</bean>

从我的应用程序上下文,因为它不是自动完成组件所必需的。

 类似资料:
  • 我为jsf创建了一个自定义转换器。getAsObject()工作正常,但getAsString()返回异常。我不确定问题出在哪里,我尝试过用不同的方式将对象转换为字符串,但它不断返回异常。 这是我的代码: 这是Product类(为简单起见排除了getter/Setters/equals()/hash()): 这是stack我得到的: 这是我使用转换器的jsf:

  • 我在正确使用autoComplete时遇到了一些问题,我试图让用户基于对象的文本字段进行搜索。目前我有以下几点: 我对这段代码的期望是,自动完成将允许用户选择单个问题实例,但一旦从自动完成中选择一个值并触发更新事件,我就会收到以下异常: 有人建议我使用转换器,但我不明白为什么选择的值被视为字符串而不是我的问题对象,因为itemValue被定义为问题对象。 编辑:这是在PrimeFaces 6.2上

  • 问题内容: 我有JSON文件,看起来像 因此,键是字符串“ SUBS_ID”,值是一个名为FeatureDetails的模型,其中包含属性“ featureSetName,featureName,…”。所以我像这样使用google.json lib从JSON文件中读取内容, 然后我试图遍历此HashMap以获取值并将其转换为我的FeatureDetails模型, 这是我的FeatureDetail

  • 在将适配器代码转换为Kotlin后,我遇到了此错误: 充气行时会触发错误: 显然,一些不应该为null的参数是null,kotlin检查它。问题是我甚至不能调试新的kotlin代码。

  • 本文向大家介绍Python转换itertools.chain对象为数组的方法,包括了Python转换itertools.chain对象为数组的方法的使用技巧和注意事项,需要的朋友参考一下 之前做1月总结的时候说过希望每天或者每2天开始的更新一些学习笔记,这是开始的第一篇。 这篇介绍的是如何把一个 itertools.chain 对象转换为一个数组。 参考 stackoverflow 上的一个回答:

  • 本文向大家介绍将json转换成struts参数的方法,包括了将json转换成struts参数的方法的使用技巧和注意事项,需要的朋友参考一下 加入对象为{name:'tom','class':{className:'class1'},classMates:[{name:'lily'}]} struts2期待的格式是 name=tom&class.className=class1&classMates