получение значений из простых компонентов - PullRequest
1 голос
/ 20 февраля 2012

У меня есть страница Facelets и управляемый компонент, связанный с ней.Я использовал компоненты Primefaces, и моя проблема заключается в том, что я хочу получить значения, выбранные пользователем каждого компонента при нажатии кнопки команды.когда я пытаюсь написать JoptionPane или system.out.print, это не работает.я установил свойство действия 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;
    }


}

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Возможно, просто опечатка при публикации в stackoverflow, но ваш метод имеет заглавные буквы: SearchFlight А ваши действия в кнопке .xhtml строчные. действие = "# {calendarBean1.searchFlight}

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

public String searchFlight() {

Я никогда не использовал компоненты Swing в JSf. Но system.out должен работать, когда закомментирован. Если вы вызываете метод. В ваших логах нет ошибок?

0 голосов
/ 20 февраля 2012

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...