2012-02-20 2 views
1

У меня есть страница facelets и управляемый компонент, связанный с ним. Я использовал компоненты primefaces, и моя проблема в том, что я хочу получить значения, выбранные пользователем для каждого компонента при щелчке по команде. , когда я пытаюсь написать JoptionPane или system.out.print, он не работает. Я установил свойство action commandbutton для метода btnsearchFlight, который найден в управляемой среде. так что любой, в чем проблема, что мне не хватает. Или пример будет очень оценен.Получение значений из компонентов поверхностей

Вот страница Facelets

<?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:ui="http://java.sun.com/jsf/facelets" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> 

    <h:head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <link href="./resources/css/default.css" rel="stylesheet" type="text/css" /> 
     <link href="./resources/css/cssLayout.css" rel="stylesheet" type="text/css" /> 
     <title>Airline Travel Planner</title> 
    </h:head> 

    <h:body> 

     <h:form id="form"> 
      <div id="top"> 
       <ui:insert name="top">AirLine Travel Planner</ui:insert> 
      </div> 
      <div> 
       <div id="left"> 
        <ui:insert name="left"></ui:insert> 
       </div> 
       <div> 
        <div id="right"> 
         <ui:insert name="right"></ui:insert> 
        </div> 
        <div id="content" class="right_content" style="height: 500px"> 
         <ui:insert name="content"> 
          <p:selectOneRadio binding="#{calendarBean1.rdbTripType}" id="rdbTripType" value="#{calendarBean1.rdbTripType}"> 
           <f:selectItem itemLabel="One Way" itemValue="1" /> 
           <f:selectItem itemLabel="Round Trip" itemValue="2" /> 
          </p:selectOneRadio> 
          <br/> 
          <h:outputLabel>From:</h:outputLabel> 
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
          <p:selectOneMenu value="#{calendarBean1.cityInfo}" style="" effect="fold" editable="true"> 
           <f:selectItems value="#{calendarBean1.cityInfo}" /> 
          </p:selectOneMenu> 
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
          <h:outputLabel style="position: relative">To:</h:outputLabel> 
          <p:selectOneMenu value="#{calendarBean1.cityInfo}" effect="fold" editable="true"> 
           <f:selectItems value="#{calendarBean1.cityInfo}" /> 
          </p:selectOneMenu> 
          <br/><br/> 
          <h:outputLabel>Depart On:</h:outputLabel> 
          <p:calendar value="#{calendarBean1.date3}" id="popupButtonDepartOn" showOn="button" /> 
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
          <h:outputLabel>Arrive On:</h:outputLabel> 
          <p:calendar value="#{calendarBean1.date2}" id="popupButtonArriveOn" showOn="button" /> 
          <br/> <br/> 

          <h:outputText value="Passenger Type" /> 
          <p:selectOneMenu id="selectOneMenuPassengerType" binding="#{calendarBean1.selectOneMenuPassengerType}" value="#{calendarBean1.selectOneMenuPassengerType}" > 
           <f:selectItem itemLabel="Select One" itemValue="" /> 
           <f:selectItem itemLabel="Adult" itemValue="1" /> 
           <f:selectItem itemLabel="Child" itemValue="2" /> 
           <f:selectItem itemLabel="Infant" itemValue="3" /> 
          </p:selectOneMenu> 
          <br/> <br/> 
          <p:selectBooleanCheckbox value="#{calendarBean1.lowestFareChecked}" /> 
          <h:outputText value="Lowest Fare" /> 
          <br/> 
          <p:commandButton id="btnSearchFlight" value="Search" action="#{calendarBean1.searchFlight}" > 

          </p:commandButton> 

Вот управляемый класс боб

package test.sample; 

import java.io.Serializable; 
import java.sql.ResultSet; 
import java.util.ArrayList; 
import java.util.Date; 
import javax.faces.bean.ManagedBean; 

import javax.faces.model.SelectItem; 
import javax.swing.JOptionPane; 
import org.primefaces.component.commandbutton.CommandButton; 
import org.primefaces.component.selectonemenu.SelectOneMenu; 
import org.primefaces.component.selectoneradio.SelectOneRadio; 
import storageMethods.FlightMethod; 

/** 
* 
* @author Nati 
*/ 
@ManagedBean(name = "calendarBean1") 
public class CalendarBean1 implements Serializable{ 

    /** 
    * Creates a new instance of CalendarBean1 
    */ 
    public CalendarBean1() { 
    } 
    private Date date1; 
    private Date date2; 
    private Date date3; 
    private boolean lowestFareChecked; 

    public boolean isLowestFareChecked() { 
     return lowestFareChecked; 
    } 

    public void setLowestFareChecked(boolean lowestFareChecked) { 
     this.lowestFareChecked = lowestFareChecked; 
    } 

    public Date getDate1() { 
     return date1; 
    } 

    public void setDate1(Date date1) { 
     this.date1 = date1; 
    } 

    public Date getDate2() { 
     return date2; 
    } 

    public void setDate2(Date date2) { 
     this.date2 = date2; 
    } 

    public Date getDate3() { 
     return date3; 
    } 

    public void setDate3(Date date3) { 
     this.date3 = date3; 
    } 
    private SelectOneRadio rdbTripType = new SelectOneRadio(); 

    public SelectOneRadio getRdbTripType() { 
     return rdbTripType; 
    } 

    public void setRdbTripType(SelectOneRadio rdbTripType) { 
     this.rdbTripType = rdbTripType; 
    } 
    public CommandButton btnSearchFlight = new CommandButton(); 

    public CommandButton getBtnSearchFlight() { 
     return btnSearchFlight; 
    } 

    public void setBtnSearchFlight(CommandButton btnSearchFlight) { 
     this.btnSearchFlight = btnSearchFlight; 
    } 
    private SelectOneMenu selectOneMenuPassengerType = new SelectOneMenu(); 

    public SelectOneMenu getSelectOneMenuPassengerType() { 
     return selectOneMenuPassengerType; 
    } 

    public void setSelectOneMenuPassengerType(SelectOneMenu selectOneMenuPassengerType) { 
     this.selectOneMenuPassengerType = selectOneMenuPassengerType; 
    } 
    public ArrayList<SelectItem> CityInfo; 

    public ArrayList<SelectItem> getCityInfo() { 
     CityInfo = CityInfo(); 
     return CityInfo; 
    } 

    public void setCityInfo(ArrayList<SelectItem> CityInfo) { 
     this.CityInfo = CityInfo; 
    } 

    public String SearchFlight() { 
//  JOptionPane.showMessageDialog(null, rdbTripType.getValue().toString()); 
//  JOptionPane.showMessageDialog(null, selectOneMenuPassengerType.getValue().toString()); 
     JOptionPane.showMessageDialog(null,date3); 
//  System.out.print("hi"); 
//  System.out.print(isLowestFareChecked()); 

     return null; 
    } 


} 
+1

Вы подтвердили, что кнопка командной кнопки достигает вашего действия? JOPtionPane в webapp звучит странно ... –

+0

Действительно, он будет выполняться только на веб-сервере. Он не будет выполняться в webbrowser. Таким образом, это полностью не справится с производственными настройками, где веб-сервер работает на физически другой машине, чем веб-браузер. – BalusC

+0

Когда я запускаю страницу, я получаю исключение follwing. Причина: java.lang.IllegalStateException: PWC3999: Не удается создать сеанс после того, как ответ был исправлен. – user1046350

ответ

1

Может быть просто опечатка при размещении на StackOverflow, но ваш метод Капитализированное: SearchFlight И ваши действия в .xhtml кнопка в нижнем регистре. действие = "# {} calendarBean1.searchFlight

Не должно быть

public String searchFlight() { 

Я никогда не использовал компоненты Swing, в franework JSF. Но System.out должен работать, когда закомментирована. Если метод вызвано. У вас нет ошибок в ваших журналах?

+0

, когда я запускаю страницу, произошло следующее исключение – user1046350

+0

Я получаю следующее исключение Не удается создать сеанс после ответа было совершено – user1046350

+0

Это совершенно другая проблема, о которой уже задавали и отвечали несколько раз. Например. http://stackoverflow.com/questions/8072311/illegalstateexception-cannot-create-a-session-after-the-response-has-been-commi – BalusC

0

Я думаю, что вы смешали разработку веб-приложений (JSF) с разработкой рабочего стола (Swing). С JSF вам не нужно создавать компонент компонента backing bean для каждого компонент лицевой стороны. Вам не нужно

  • org.primefaces.component.commandbutton.CommandButton
  • org.primefaces.component.selectonemenu.SelectOneMenu
  • org.primefaces.component.selectoneradio.SelectOneRadio

в вашем боба, если вы хотите только свяжите входные значения этих компонентов.

Конечно, в некоторых ситуациях вы получите преимущества от связывания компонентов, но это не обязательно в вашем примере.

В матке вы используете атрибут value и атрибут binding, но они имеют одинаковый контент.

Если вас интересуют только входные значения, то атрибут value - это все, что вам нужно. Пусть этот атрибут указывает на фоновое поле бэкэнда, которое будет удерживать только значение, например. a int или String.

Смежные вопросы