gpt4 book ai didi

java - JSF 2 单击按钮时执行操作

转载 作者:行者123 更新时间:2023-12-01 14:20:37 26 4
gpt4 key购买 nike

我有这个 JSF 代码

<f:view>
<h:form>
<h:commandButton value="Generate License File" type="button" action="#{agreement.generateLicenseFile}"/>
</h:form>
</f:view>

这就是 bean

@ManagedBean(name="agreement")
@RequestScoped
public class AgreementBean {

private boolean generate=false;

public void generateLicenseFile(){
generate=true;
}
}

当我执行应用程序并单击按钮时,绝对没有任何反应。执行过程中没有错误。它根本没有任何作用。

有什么想法吗?

--编辑--

我的意思是 boolean 值没有被修改。

最佳答案

When I execute the app, and click on the button, absolutely nothing happens

幕后发生了很多事情!

  • 它将触发 POST向服务器发出的请求将由 Faces Servlet 处理。
  • 这将启动 JSF lifecycle您可以按照 this tutorial 进行调试。对于 JSF 生命周期,我将仅解释最后两个阶段(其他链接很好地解释了其他 4 个阶段,特别是 BalusC 的)。
  • 在调用应用程序阶段(第五阶段),服务器将执行 generateLicenseFile绑定(bind)到 <h:commandButton> 的方法在你的<h:form> .
  • 由于您在此阶段没有返回任何内容,因此在渲染响应阶段(第 6 阶段)将仅检索更新了 ViewState 的当前 View 。此外,由于您没有对 View 中的任何组件进行重大更新,因此您将看不到任何内容。

此外,由于 bean 配置为 @RequestScoped它将在每次提交表单时创建,并且 generate字段将始终 false根据请求创建时(因为您没有在 View 中更改其值,所以它将保留 false 值)。 bean 创建可能会根据声明的范围而有所不同。更多信息:Communication in JSF 2: Managed bean scopes .

如果您想在 View 中看到某些内容,我建议您稍微更改一下代码:

JSF 代码

<h:form>
#{agreement.generate}
<br />
<h:commandButton value="Generate License File" type="button"
action="#{agreement.generateLicenseFile}" />
</h:form>

托管bean

@ManagedBean(name="agreement")
@ViewScoped //removed RequestScoped, this WILL make the difference
public class AgreementBean {
private boolean generate = false;
public void generateLicenseFile(){
generate = !generate;
}
//getter and setter for generate field
}

关于java - JSF 2 单击按钮时执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17604073/

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