2012-02-20 127 views
1

我有與之關聯的facelets頁面和託管bean。 我已經使用了primefaces組件,而我的問題是我想要獲取每個組件的用戶在單擊commandbutton時所選擇的值。 當我嘗試寫一個JoptionPane或system.out.print它不起作用。我已將commandbutton action屬性設置爲在managedbean中找到的btnsearchFlight方法。所以任何一個問題是什麼我錯過了。或者一個例子將非常感激。從primefaces組件獲取值

這裏是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> 

這裏是管理bean類

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中聽起來很奇怪...... – 2012-02-20 12:18:41

+0

的確,它只會在web服務器上執行。它不會在網頁瀏覽器中執行。因此,在Web服務器運行在與web瀏覽器完全不同的機器上的生產環境中,這完全失敗。 – BalusC 2012-02-20 12:30:54

+0

當我運行頁面時,我得到了follwing異常引起:java.lang.IllegalStateException:PWC3999:響應提交後無法創建會話。 – user1046350 2012-02-20 12:50:28

回答

1

也許只是在計算器發佈時一個錯字,但你的方法是大寫: SearchFlight 和你的行動在.xhtml按鈕中是小寫字母。 行動=「#{} calendarBean1.searchFlight

它不應該是

public String searchFlight() { 

我從來沒有使用Swing組件在JSF franework。但是,當註釋掉的System.out應該工作。如果你的方法在你的日誌中你沒有看到任何錯誤嗎?

+0

當我運行頁面時出現以下異常 – user1046350 2012-02-20 12:42:21

+0

我收到以下異常無法在響應後創建會話已經承諾 – user1046350 2012-02-20 12:44:58

+0

這是一個完全不同的問題,以前已經被問及過幾次。例如。 http://stackoverflow.com/questions/8072311/illegalstateexception-cannot-create-a-session-after-the-response-has-been-commi – BalusC 2012-02-20 13:03:07

0

我認爲你將webapp開發(JSF)與桌面開發(Swing)混合在一起,使用JSF你不需要爲每一個單獨的bean創建一個支持bean組件您不需要

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

,如果你只是想綁定這些組件的輸入值。

當然在某些情況下,您將從組件綁定中獲益,但在您的示例中它不是必需的。

在facelet中使用value屬性和binding屬性,但它們具有相同的內容。

如果您只對輸入值感興趣,則可以使用value屬性。讓這個屬性指向一個僅支持該值的backing bean字段,例如intString