0

全部,

我一直在阅读和搜索,虽然上面有几个项目,但似乎我错过了一些东西。我的表单在转换 selectOneListBox 时一直失败

我已经阅读并搜索过,但到目前为止我还没有找到导致此问题的原因。据我阅读和发现的可能原因如下:

  1. Object.equals() 不正确
  2. 菜单列表为空。

内联是我基于用户类的转换器:

@FacesConverter("misc.util.UserConverter")
public class UserConverter implements Converter {
    private static HashMap<String, Users> map = new HashMap<String, Users>();
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        Users user = map.get(value);
        Logger.getGlobal().log(Level.INFO, "UserConverter - getAsObject " + user.getEmail());
        Logger.getGlobal().log(Level.INFO, "UserConverter - getAsObject value " + value);
        return user;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        Users user = (Users)value;
        map.put(user.getEmail().toString(), user);
        Logger.getGlobal().log(Level.INFO, "UserConverter - getAsString");
        return user.getEmail().toString();
    }
}

失败的代码:

ticketUpdateController.lovResearchers - 类型 List - 从 JpaController 获得的列表。ticketUpdateController.researcher - 类型用户

我还尝试添加 inputHidden,因为此页面有一个 viewParam,我需要保持此值才能刷新。尽管没有它,它也会发生同样的情况。

    <p:dialog id="assignResearcherDialog" header="Assign Researcher" widgetVar="assignResearcher" resizable="false">
        <h:form id="assignResearcherForm">
            <p:panel>
                <p:selectOneListbox id="selRec" value="#{ticketUpdateController.researcher}">
                    <f:selectItems value="#{ticketUpdateController.lovResearchers}" var="r" itemLabel="#{r.email}" itemValue="#{r}"></f:selectItems>
                    <f:converter converterId="misc.util.UserConverter"></f:converter>
                    <h:inputHidden value="#{ticketUpdateController.ticketNumber}"></h:inputHidden>
                </p:selectOneListbox>
                <p:commandButton value="Assign" actionListener="#{ticketUpdateController.setResearcher}" oncomplete="handleSubmitRequest(xhr, status, args, 'assignResearcherDialog','assignResearcherForm');" update=":ticketUpdateForm :message">
                    <h:inputHidden value="#{ticketUpdateController.ticketNumber}"></h:inputHidden>
                    <f:param id="tnr" value="#{ticketUpdateController.ticketNumber}"></f:param>
                </p:commandButton>
            </p:panel>
        </h:form>
    </p:dialog>

我的故障排除:

  • 我已经检查了 Users 类,并且根本没有调用 equals 。(通过将记录器放在那里进行检查)
  • 将日志记录在转换器类中以查看何时调用它。到目前为止,它似乎在需要时被调用。JSF 页面加载,当我按下某个按钮时。
  • 在 TicketUpdateController bean 的 init 中添加了 logger,以便我可以查看这些值是否仍在内存中。
警告:类 gui.controller.TicketUpdateController 正在启动...
警告:类 gui.controller.TicketUpdateController 设置值...
信息:UserConverter - getAsString 信息:UserConverter - getAsString
信息:UserConverter - getAsString 信息:UserConverter - getAsString
警告:类 gui.controller.TicketUpdateController 正在启动...
警告:类 gui.controller.TicketUpdateController 设置值...
信息:UserConverter - getAsString 信息:UserConverter - getAsString
信息:UserConverter - getAsString 信息:UserConverter - getAsString
信息:UserConverter - getAsObject Researcher@localhost.com
INFO:UserConverter - getAsObject 值 Researcher@localhost.com
警告:类 gui.controller.TicketUpdateController 正在启动...
4

1 回答 1

0

发现了什么问题。

所以基本上我使用了错误的课程。
我的页面 bean 是 TicketUpdateController,但我的转换器是供用户使用的。

所以我将他selectedItems中的字段从TicketUpdateController更改为UsersController。

毕竟我应该从 UsersController 而不是 TicketUpdatecontroller 获取我的所有用户。

于 2013-03-06T12:36:19.833 回答