Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > SelectItem + HtmlCommandButton = баг?


Автор: Omar66 10.12.2009, 07:34
jsf-isp c кнопкой commandButton и списком selectOneMenu. Жму кнопку - работает commandButton1_action(). !!! НЕ РАБОТАЕТ, если value элементам в списке задать Object.
А в конструкторе читаю SelectItem(java.lang.Object value, java.lang.String label). Когда value задаю String, то всё ОК, а если не String , то не работает. В JDeveloper 10.1.3.5.0 всё это происходит. 

Файл Untitled1.java  
Код

package btnAndCombo.backing;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UISelectItems;
import javax.faces.component.html.HtmlCommandButton;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.model.SelectItem;

public class Untitled1
{
  private HtmlForm form1;
  private HtmlCommandButton commandButton1;
  private HtmlSelectOneMenu selectOneMenu1;
  private UISelectItems selectItems1;

  public void setForm1( HtmlForm form1 )
  {
    this.form1 = form1;
  }

  public HtmlForm getForm1()
  {
    return form1;
  }

  public void setCommandButton1( HtmlCommandButton commandButton1 )
  {
    this.commandButton1 = commandButton1;
  }

  public HtmlCommandButton getCommandButton1()
  {
    return commandButton1;
  }

  public String commandButton1_action()
  {
    System.out.println( "do commandButton1_action()" );
    return null;
  }

  public void setSelectOneMenu1( HtmlSelectOneMenu selectOneMenu1 )
  {
    this.selectOneMenu1 = selectOneMenu1;
  }

  public HtmlSelectOneMenu getSelectOneMenu1()
  {
    return selectOneMenu1;
  }

  public void setSelectItems1( UISelectItems selectItems1 )
  {
    this.selectItems1 = selectItems1;
  }

  public UISelectItems getSelectItems1()
  {
    List<SelectItem> choices = new ArrayList<SelectItem>();

// !!! Если эту часть раскомментировать, а ниже закомментировать, то всё ОК
//    choices.add( new SelectItem( "1", "JSF News" ) );
//    choices.add( new SelectItem( "2", "IT Industry News" ) );
//    choices.add( new SelectItem( "3", "Company News" ) );

    choices.add( new SelectItem( new Integer(1), "JSF News" ) );
    choices.add( new SelectItem( new Integer(2), "IT Industry News" ) );
    choices.add( new SelectItem( new Integer(3), "Company News" ) );

    selectItems1 = new UISelectItems();

    selectItems1.setValue( choices );
    
    return selectItems1;
  }
}



Файл untitled.jsp
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=windows-1251"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<f:view>
  <html>
    <head>
      <meta http-equiv="Content-Type"
            content="text/html; charset=windows-1251"/>
      <title>untitled1</title>
      <style type="text/css">
      body {
      background-color: #ffefd6; 
}
      a:link { color: #d6ff84; }
    </style>
    </head>
    <body><h:form binding="#{backing_untitled1.form1}" id="form1">
        <p>
          <h:commandButton value="commandButton1"
                           binding="#{backing_untitled1.commandButton1}"
                           id="commandButton1"
                           action="#{backing_untitled1.commandButton1_action}"/>
        </p>
        <p>
          <h:selectOneMenu binding="#{backing_untitled1.selectOneMenu1}"
                           id="selectOneMenu1">
            <f:selectItems binding="#{backing_untitled1.selectItems1}"
                           id="selectItems1"/>
          </h:selectOneMenu>
        </p>
      </h:form></body>
  </html>
</f:view>
<%-- oracle-jdev-comment:auto-binding-backing-bean-name:backing_untitled1--%>


Не работает, нет сообщения "do commandButton1_action()" из public String commandButton1_action()
Баг или моё невежество? smile Как бороться?

Автор: Bandit 11.12.2009, 12:04
Какая версия jsf? Может в этом ошибка? Поскольку с такой проблемой не сталкивался. С другой стороны всегда использовал в 
new SelectItem() только простые типы. 

Автор: Eric_Cartman 11.12.2009, 13:31
нужно написать свой конвертер, либо юзать "Any basic or primitive types that have converters"

Автор: Omar66 14.12.2009, 10:40
Цитата(Bandit @ 11.12.2009,  12:04)
Какая версия jsf? Может в этом ошибка? Поскольку с такой проблемой не сталкивался. С другой стороны всегда использовал в 
new SelectItem() только простые типы.

JDeveloper 10.1.3.1 upgrades to the JavaServer Faces reference implementation version 1.1_02.

Про простые типы:
 
Код

 choices.add( new SelectItem( 1, "JSF News" ) );
 choices.add( new SelectItem( 2, "IT Industry News" ) );
 choices.add( new SelectItem( 3, "Company News" ) );
Не работает. Видимо автоупаковка...

Добавлено через 5 минут и 27 секунд
Цитата(Eric_Cartman @ 11.12.2009,  13:31)
нужно написать свой конвертер, либо юзать "Any basic or primitive types that have converters"

Конверторы ещё не доводилось писать... Можно подробнее что во что конвертировать?  smile 

Автор: Eric_Cartman 14.12.2009, 17:06
Цитата(Omar66 @ 14.12.2009,  10:40)
Конверторы ещё не доводилось писать... Можно подробнее что во что конвертировать?  smile

Я лучше посоветую книжку полистать: Java Server Faces In Action

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)