1

我有

<p:remoteCommand name="updateSelectedTarget" update="partToUpdate" actionListener="#{bean.onSelectedTarget}"/>

bean.java

public void onSelectedTarget() {
    System.out.println("here");
}

使用此配置,该操作仅触发一次。我需要使用 actionListener 还是 action?和remoteCommand的进程参数有关系吗?

我只想补充一点,它以前工作过。我刚刚更改了下面的更新部分

<h:panelGroup id="partToUpdate" layout="block">
    <p:panelGrid rendered="#{bean.selectedTarget == null ? false : true}">
        ...
        <h:selectOneMenu value="#{bean.stuffID}">
            ...
        </h:selectOneMenu>
        ...
    </p:panelGrid>
</h:panelGroup>

在只有一个 ID 之前 selectOneMenu

<h:selectOneMenu value="#{bean.stuffID}">

现在我有了对象

<h:selectOneMenu value="#{bean.stuff}">
4

4 回答 4

0
@FacesConverter("user")
public class UserConverter implements Converter{

    private List<User> users;

    public UserConverter(){
        this.users = myController.getAllUsers();
    }

    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        return this.getUser(value);
    }

    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return String.valueOf(((User) value).getId()).toString();
    }


    public User getUser(String id) {
        Iterator<User> iterator = this.users.iterator();
        while(iterator.hasNext()) {
           User user = iterator.next();

           if(user.getId() == Integer.valueOf(id)) {
               return user;
           }
        }
        return null;
    }
}

我认为我的转换器很好,因为我在其他地方使用它。也许错误是如何将它与 h:selectOneMenu 一起使用

我有这个

<h:selectOneMenu value="#{bean.selectedUser}">
    <f:selectItem itemLabel="None" itemValue="null" />
    <f:selectItems value="#{bean.allusers}" var="user" itemValue="#{user.id}" itemLabel="#{user.name}"/>
    <f:converter converterId="user"/>
</h:selectOneMenu>
于 2013-07-16T09:36:21.420 回答
0

java.lang.ClassCastException 来自该行

<f:selectItem itemLabel="None" itemValue="null" />

你能验证一下吗

于 2013-07-16T10:05:38.057 回答
0

所以总而言之,我将我的 selectOneMenu 更改为

<h:selectOneMenu value="#{bean.selectedUser}">
    <f:selectItem itemLabel="None" itemValue="#{null}" />
    <f:selectItems value="#{bean.allusers}" var="user" itemValue="#{user}" itemLabel="#{user.name}"/>
    <f:converter converterId="user"/>
</h:selectOneMenu>

在我的转换器中

public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if(!StringUtils.isInteger(value)) {
        return null;
    }
    return this.getUser(value);
}

public String getAsString(FacesContext context, UIComponent component, Object value) {
    if(value == null) {
        return null;
    }
    return String.valueOf(((User) value).getId()).toString();
}

使用下面的方法,因为我正在寻找 id 和 getAsObject 值返回标签“无”

public static boolean isInteger(String s) {
    try { 
        Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
        return false; 
    }
    return true;
}

并且问题解决了。谢谢

编辑

不要忘记将 equals 覆盖方法添加到 User 类。

于 2013-07-16T11:34:26.637 回答
-1

这种情况发生在我身上很多次,我发现问题来自调用当前页面的上一页

于 2013-07-16T10:00:36.660 回答