我有
<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}">
答案 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)
它发生在我这样的很多次,我发现问题来自上一个调用当前页面的页面