gpt4 book ai didi

java - 更新 spring webflow 中的对象未显示在 UI 上

转载 作者:行者123 更新时间:2023-11-29 09:17:55 25 4
gpt4 key购买 nike

我真的很困惑,因为我对这整个主题还很陌生。我目前正在使用 spring webflow 开发一个项目。在我的网络界面中,用户必须输入存储在 bean 中的用户名。

表格:

  <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"/>

根据bean:

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;
}

为了更新 bean 的值,我将 bean 对象转发给其他一些类

public class ConnectionService {
public boolean connect (String username, String password, String serverURL,
boolean bypass, HumanBrokerBean brokerBean){ ....
}
}

当我尝试打印出 bean 对象的变量值时

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,这是每个 Broker 的 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 有两个不同的实例,但我不确定为什么。我想我必须在我的 bean 中使用一些注释,但我不确定是哪一个。

我需要做什么才能让这个场景运行?

最佳答案

您的 SWF servlet 是否包含“component-scan”标签?如果是,这将导致 bean 被扫描两次:首先是在根 Web 应用程序上下文中,然后是在 SWF servlet 上下文中。您的流程操作将引用 SWF-servlet bean 实例,但 JSF EL 表达式将位于主应用程序上下文中。

对于 MVC/SWF,建议只扫描 servlet 上下文中的 @Controller bean。看 Why DispatcherServlet creates another application context?

关于java - 更新 spring webflow 中的对象未显示在 UI 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com