Primefaces只需调用一次remotecommand动作

时间:2013-07-16 09:10:50

标签: jsf primefaces

我有

<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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

java.lang.ClassCastException来自

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

你可以验证这个吗

答案 2 :(得分: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值,返回标签“None”

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

问题解决了。 Thnks

修改

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

答案 3 :(得分:-1)

它发生在我这样的很多次,我发现问题来自上一个调用当前页面的页面