Мы должны все еще волноваться о пользователях, выключающих cookie?

В основном необходимо следовать @Slaw инструкциям. Создайте Model. Совместно используйте Model между два Controllers. Наблюдайте ток модели Customer и реагируйте соответственно. MCVE Ниже:

Основной Класс: (загружают оба этапа корректной Сценой. Создайте модель и передайте ее обоим Контроллерам):

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author sedri
 */
public class JavaFXApplication36 extends Application {

    @Override
    public void start(Stage stage) {
        try {
            FXMLLoader listViewFXMLLoader = new FXMLLoader(getClass().getResource("ListViewFXML.fxml"));
            Parent listViewRoot = listViewFXMLLoader.load();
            ListViewController listViewController = listViewFXMLLoader.getController();
            Scene scene1 = new Scene(listViewRoot);
            stage.setScene(scene1);           

            FXMLLoader detailsFXMLLoader = new FXMLLoader(getClass().getResource("DetailsFXML.fxml"));
            Parent detailsRoot = detailsFXMLLoader.load();
            DetailsController detailsController = detailsFXMLLoader.getController();
            Scene scene2 = new Scene(detailsRoot);
            Stage stage2 = new Stage();
            stage2.setScene(scene2);

            DataModel model = new DataModel();
            listViewController.initModel(model);
            detailsController.initModel(model);

            stage.show();
            stage2.show(); 
        } catch (IOException ex) {
            Logger.getLogger(JavaFXApplication36.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

Образцовый Класс: (Не отстают от текущего Клиента и ObservableList Клиента)

import javafx.beans.Observable;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

/**
 *
 * @author sedrick
 */
public class DataModel {
    private final ObservableList customerList = FXCollections.observableArrayList(customer -> new Observable[]{customer.nameProperty(), customer.ageProperty()});
    private final ObjectProperty currentCustomer = new SimpleObjectProperty();

    public ObjectProperty currentCustomerProperty() {
        return currentCustomer;
    }

    public void setCurrentCustomer(Customer currentCustomer) {
        this.currentCustomer.set(currentCustomer);
    }

    public Customer getCurrentCustomer() {
        return this.currentCustomer.get();
    }  


    public ObservableList loadCustomers()
    {        
        customerList.add(new Customer("John Doe", 21));
        customerList.add(new Customer("Jane Joe", 20));

        return customerList;
    }
}

Клиентский Класс:

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
/**
 *
 * @author sedrick
 */
public class Customer {
    private final StringProperty name = new SimpleStringProperty();
    private final IntegerProperty age = new SimpleIntegerProperty();
    public Customer(String name, int age) {
        this.name.set(name);
        this.age.set(age);
    }

    public String getName()
    {
       return this.name.get();
    }

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

    public StringProperty nameProperty()
    {
        return this.name;
    }

    public int getAge()
    {
       return this.age.get();
    }

    public void setAge(int age)
    {
        this.age.set(age);
    }

    public IntegerProperty ageProperty()
    {
        return this.age;
    }
}

Контроллер ListView: (Модель Initialize, установите ListView и наблюдайте текущее клиентское свойство)

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;

/**
 *
 * @author sedri
 */
public class ListViewController implements Initializable {
   @FXML private ListView listView;

   private DataModel model;



    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

    public void initModel(DataModel model)
    {
        // ensure model is only set once:
        if (this.model != null) {
            throw new IllegalStateException("Model can only be initialized once");
        }

        listView.getSelectionModel().selectedItemProperty().addListener((obs, oldCustomer, newCustomer) -> 
            model.setCurrentCustomer(newCustomer));

        model.currentCustomerProperty().addListener((obs, oldCustomer, newCustomer) -> {
            if (newCustomer == null) {
                listView.getSelectionModel().clearSelection();
            } else {
                listView.getSelectionModel().select(newCustomer);
            }
        });

        listView.setCellFactory(lv -> new ListCell() {
            @Override
            public void updateItem(Customer customer, boolean empty) {
                super.updateItem(customer, empty);
                if (empty) {
                    setText(null);
                } else {
                    setText("Name: " + customer.getName() +  "  Age: " + customer.getAge());
                }
            }
        });

        listView.setItems(model.loadCustomers());
    }
}

ListView FXML:


   
      
   

DetailsController: (Модель Initialize и наблюдают текущее клиентское свойство)

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;

/**
 * FXML Controller class
 *
 * @author sedri
 */
public class DetailsController implements Initializable {
    @FXML TextField tfName, tfAge;

    private DataModel model;
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

     public void initModel(DataModel model) {
        // ensure model is only set once:
        if (this.model != null) {
            throw new IllegalStateException("Model can only be initialized once");
        }

        this.model = model ;

        model.currentCustomerProperty().addListener((observable, oldCustomer, newCustomer) -> {
            if(newCustomer == null){
                tfName.setText("");
                tfAge.setText("");
            }
            else{
                tfName.setText(newCustomer.getName());
                tfAge.setText(Integer.toString(newCustomer.getAge()));
            }
        });
    }
}

Детали FXML:










   
      
   
      
   

[еще 1139] информация:

@James D отвечают на Образцовом Контроллере представления (MVC) .
код GitHub .

7
задан dsimard 27 October 2009 в 11:52
поделиться

4 ответа

Думаю, я поместил это в ту же категорию, что и JavaScript. У большинства людей файлы cookie будут включены, но у некоторых они отключены. Нет такого страха, как в середине 90-х по поводу того, что злые корпорации отслеживают вас по всей сети и т. Д. Люди стали более восприимчивыми к тому, как работает Интернет, и что требуется для удобства веб-сайтов, запоминающих, кто вы есть, и т. Д. .

5
ответ дан 7 December 2019 в 01:22
поделиться

Мои файлы 2c: cookie по умолчанию хороши, а Javascript по умолчанию - плохой.

Что касается общего настроения пользователей ... Я бы все равно обнаружил cookie, чтобы вы могли отображать значимая ошибка, а не просто неработоспособность, если ваши пользователи блокируют файлы cookie по какой-либо причине. Однако не пытайтесь обойти это.

1
ответ дан 7 December 2019 в 01:22
поделиться

Я предполагаю, что было бы целесообразно провести тест, чтобы убедиться, что у ваших посетителей отключены файлы cookie, потому что у разных групп будут разные проблемы. (если это паранойя, ограничения безопасности и т. д.). Веб-сайт, обслуживающий государственных служащих, может иметь более высокий процент непринятия файлов cookie, чем другие сайты.

Поскольку некоторые браузеры (или плагины) позволяют настраивать принятие файлов cookie сервером или доменом , возможно, что даже два сайта с одинаковыми группами пользователей могут иметь разные уровни «доверия», если пользователи считают, что один сайт кажется сомнительным.

1
ответ дан 7 December 2019 в 01:22
поделиться

Некоторые люди по-прежнему время от времени отключают файлы cookie. Обычно потому, что они хотели что-то протестировать, а потом забывали оставить их. В настоящее время для большинства веб-приложений требуется файлов cookie, поэтому я считаю вполне приемлемым, что вместо сложных обходных путей для обеспечения того же взаимодействия с пользователем с файлами cookie или без них вы можете жить с простой проверкой и сообщением о том, что без файлов cookie пользователь не сможет использовать сайт.

Многие крупные веб-сайты ведут себя подобным образом.

3
ответ дан 7 December 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: