p: selectOneMenu Проблема? - PullRequest
       50

p: selectOneMenu Проблема?

1 голос
/ 22 августа 2011

Следующий код прекрасно работает для h:selectOneMenu, но не работает для p:selectOneMenu

Нет элемента в p:selectOneMenu

Facelet

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core">
  <h:head>
    <title>Facelet Title</title>
  </h:head>
  <h:body>
    <h:form>
      <h:selectOneMenu value="#{testBean.name}">
        <f:selectItems value="#{testBean.names}"/>
      </h:selectOneMenu>

      <p:selectOneMenu value="#{testBean.name}">
        <f:selectItems value="#{testBean.names}"/>
      </p:selectOneMenu>
    </h:form>
  </h:body>
</html>

Боб

package net.footfeed.beans;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class TestBean {

  private String name = "name1";
  private String[] names = new String[] {"name1", "name2", "name2"};

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String[] getNames() {
    return names;
  }

}

1 Ответ

1 голос
/ 22 августа 2011

Любопытно, он не поддерживает List<T> или T[] на <f:selectItems>.Вам необходимо создать List<SelectItem> или SelectItem[] или, что лучше, явно указать атрибут var.Это работает только с List<T>.

<f:selectItems value="#{bean.names}" var="name" itemValue="#{name}" itemLabel="#{name}" />

с

private List<String> names = Arrays.asList("name1", "name2", "name3");

Поскольку это не имеет смысла, я бы посоветовал сообщить об этой проблеме в систему отслеживания проблем.

Более любопытно, что когда я опускаю itemLabel (который затем должен просто отображать itemValue как метку), он бросает довольно серьезный NPE на Tomcat:

java.lang.NullPointerException
    at org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:182)
    at com.sun.faces.application.view.WriteBehindStateWriter.write(WriteBehindStateWriter.java:127)
    at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.write(HtmlResponseWriter.java:666)
    at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeSelectItems(SelectOneMenuRenderer.java:261)

PrimeFaces 3.0 явно все еще вбета стадия.

...