Я действительно запутался, потому что я довольно новичок во всей этой теме. В настоящее время я занимаюсь разработкой проекта с использованием Spring Webflow. В моем веб-интерфейсе пользователь должен ввести имя пользователя, которое хранится в бине.
Форма:
<fieldset>
<legend>User Details</legend>
<h:outputText value="Please enter the Name for your Broker: " />
<h:inputText id="brokerName" value="#{brokerBean.brokerName}"/>
<h:outputText value="Please enter the password for your Broker: " />
<h:inputSecret id="password" value="#{brokerBean.password}"/>
</fieldset>
<p:commandButton value="Register Broker" action="register" ajax="false"/>
Соответствующий компонент:
public class HumanBrokerBean implements Serializable{
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The broker name. */
private String brokerName;
/** The password. */
private String password;
private double cashPosition = 0;
... getters & setters...
После ввода имени пользователя пользователь перенаправляется на следующую страницу, где его текущие cashPosition
должны отображаться и обновляться каждые 5 секунд, потому что значение могло измениться (это можно было сделать с помощью опроса PrimeFaces). Пока это работает.
Когда пользователь ввел свое имя пользователя и некоторые другие значения, он нажимает кнопку и запускается переход соответствующего потока.
<view-state id="view">
<transition on="register" to="mainpage">
<evaluate expression="brokerBean.checkCredentials(flowRequestContext)" />
<evaluate expression="connectionBean.connect(brokerBean.brokerName, brokerBean.password, brokerBean)" />
</transition>
</view-state>
И метод ConnectionBean:
public boolean connect(String username, String password, HumanBrokerBean brokerBean){
ConnectionService connection = new ConnectionService();
//if there have been problems while establishing the connection
if(!connection.connect(username, password, this.serverConnection, byPass, brokerBean)){
return false;
}
//if connection was established
return true;
}
Чтобы обновить значения компонента, я перенаправил объект компонента в другой класс
public class ConnectionService {
public boolean connect (String username, String password, String serverURL,
boolean bypass, HumanBrokerBean brokerBean){ ....
}
}
Когда я пытаюсь распечатать значения переменных объекта EJB с
System.out.println("Brokername :"+brokerBean.getBrokerName())
Я получаю правильные результаты. Когда я сейчас пытаюсь обновить cashPosition
с
brokerBean.setCashPosition();
Правильный результат не отображается в моем опросном разделе веб-интерфейса. Начальное значение ноль возвращается всегда.
Как упомянуто выше, я реализовал функцию опроса с помощью Primefaces-poll, который использует AJAX.
<h:form>
<h:outputText id="txt_cash" value="#{brokerBean.cashPosition}" />
<p:poll interval="3" update="txt_cash" />
</h:form>
А ответ AJAX, который я всегда получаю ... всегда возвращает 0.0, что является начальным значением cashPosition каждого брокера ...
<?xml version='1.0' encoding='UTF-8'?>
<partial-response><changes><update id="j_idt16:txt_cash"><![CDATA[<span id="j_idt16:txt_cash">0.0</span>]]></update><update id="javax.faces.ViewState"><![CDATA[e1s2]]></update></changes><extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension></partial-response>
Для меня это означает, что есть два разных экземпляра моего BrokerBean
, но я не уверен почему. Я думаю, что мне придется использовать некоторую аннотацию в моем бобе, но я не уверен, какая именно.
Что мне нужно сделать, чтобы запустить этот сценарий?