JSF 2按钮单击时执行操作

时间:2013-07-11 21:45:52

标签: java jsf jsf-2

我有这个JSF代码

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

这就是豆子

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

    private boolean generate=false; 

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

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

有什么想法吗?

- 编辑 -

我的意思是不修改布尔值。

1 个答案:

答案 0 :(得分:1)

  

当我执行应用程序并单击按钮时,绝对没有任何反应

很多事情都发生在幕后!

  • 它将向服务器发出POST请求,该请求将由Faces Servlet处理。
  • 这将启动JSF lifecycle,您可以在this tutorial之后对其进行调试。对于JSF生命周期,我只解释最后两个阶段(其他链接很好地解释了其他4个阶段,特别是BalusC)。
  • 在Invoke Application阶段(第5阶段),服务器将执行绑定到generateLicenseFile<h:commandButton>的{​​{1}}方法。
  • 由于您没有从此阶段返回任何内容,因此在渲染响应阶段(第6阶段)将仅检索更新ViewState的当前视图。此外,由于您没有对视图中的任何组件进行大的更新,因此您将看到 nothing

此外,由于bean配置为<h:form>,因此将在每个表单提交时创建它,并且@RequestScoped字段在请求上创建时始终为generate(因为您'它不会改变它的值,因为它将保持false值。 bean的创建可以根据声明的范围而变化。更多信息:Communication in JSF 2: Managed bean scopes

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

JSF代码

false

托管bean

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