jsf-2 - 未使用字符串以外的对象调用 Primefaces selectOneMenu 监听器

标签 jsf-2 primefaces tomcat7

<分区>

我正在使用 Jsf 2.0 和 Primefaces 3.2 实现一个网络应用程序。 我注意到了这个意外的行为:我有一个 selectOneMenu 和一个 commandButton,如下所示

<p:selectOneMenu id="selsel" value="#{bean.myObj}">
  <f:selectItems value="#{bean.myObjList}" />
</p:selectOneMenu>
<p:commandButton id="btnid" value="Ok" actionListener="#{bean.updateSelectValues()}" />

如果 myObj 不是 String,则不会调用 updateSelectValues 方法。我根本看不到任何异常或错误,它只是没有被调用。这是支持 bean:

private List<MyObj> myObjList;
private MyObj myObj;
// getters and setters

public void updateSelectValues() {
  System.out.println(this.myObj);
}

myObj 的代码:

public class MyObj implements Serializable {

  private static final long serialVersionUID = 1L;

  private String param1;
  private int param2;

  @Override
  public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append("MyObj [param1=");
    builder.append(this.param1);
    builder.append(", param2=");
    builder.append(this.param2);
    builder.append("]");
    return builder.toString();
  }

}

最佳答案

那是因为 HTML 和 HTTP 不理解 Java 对象。所有 Java 对象都转换为 String当 HTML 由 JSF 生成时。所有 HTTP 请求参数 String当提交的表单数据由 JSF 处理时,应该将其转换回 Java 对象。

至于你的具体问题,如果你添加了一个<h:message> , <h:messages>或等效于表单的 PrimeFaces(并且还在 ajax 提交上更新了它),那么您应该已经注意到“null converter”的转换错误。此外,如果您注意了服务器日志,您应该也看到了有关未处理消息的警告。

您需要创建自定义 Converter MyObj 之间转换及其独特的String表示。例如:

@FacesConverter(forClass=MyObj.class)
public class MyObjConverter implements Converter {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object valueToRender) {
        // Convert MyObj to its unique String representation.
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
        // Convert String to MyObj.
    }

}

通常这些对象已经存储在一些数据库中或通过它们的 ID 进行映射。然后您将该 ID 用作唯一的 String代表。

关于jsf-2 - 未使用字符串以外的对象调用 Primefaces selectOneMenu 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10601710/

相关文章:

jsf - Mojarra session 中的服务器状态序列化

html - 特定 id 的 css 样式未按预期工作

java - 关于servlet的正确使用方法的问题

java - :inputText -Field is visible?

ajax - 无法捕获 JSF 2 应用程序上的 ajax 错误

java - 无法使 Keycloak Tomcat 7 适配器​​工作(版本 3.4.3.Final)

java - tomcat部署后的文本文件位置

java - Primefaces DataTable 排序不正确

jsf - p :selectOneMenu doesn't render custom content via p:column on List<String>

java - 如何延迟所有tomcat服务器请求