Jsf 2 JSF ViewScope-在操作时返回null不会更新视图

Jsf 2 JSF ViewScope-在操作时返回null不会更新视图,jsf-2,view-scope,Jsf 2,View Scope,我有一个ViewScope模式下的托管Bean。因此,当我从这个托管Bean调用一些操作时,我的页面不会更新。我看到我的操作被很好地调用,并返回null(viewscope工作流程正常) 那么,我做错了什么 如果我使用Ajax重新呈现页面,效果会很好 编辑: 我的版本是: JSF 2.1.14和Primefaces 3.4.1 我的代码: @ManagedBean(name = "test") @ViewScoped public class TestMB implements Serializ

我有一个ViewScope模式下的托管Bean。因此,当我从这个托管Bean调用一些操作时,我的页面不会更新。我看到我的操作被很好地调用,并返回null(viewscope工作流程正常)

那么,我做错了什么

如果我使用Ajax重新呈现页面,效果会很好

编辑:

我的版本是:

JSF 2.1.14和Primefaces 3.4.1

我的代码:

@ManagedBean(name = "test")
@ViewScoped
public class TestMB implements Serializable {
   private String status;

   public String getStatus() { return this.status; }
   public void setStatus(String status) { this.status = status; } 

   public String changeStatus() {
      this.status = "ViewScope Works!";
      return null;
   }

}
我的页面:

<!DOCTYPE HTML>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.org/ui"
                template="/template/ui.xhtml">
    <ui:define name="head">
    </ui:define>
    <ui:define id="teste" name="content">
        <h:form id="form">  
            <h:outputText id="status" value="OK?: #{test.status}" />
            <p:commandButton id="myAction" value="Do it!" action="#{test.changeStatus}"  />
        </h:form>  
    </ui:define>
</ui:composition>

在我的屏幕上,状态变量不变。而且,是的。。该操作称为OK。一些提示?

您正在使用
提交表单。默认情况下,它发送一个ajax请求。它默认不更新任何内容。因此,你观察到的行为完全是意料之中的。有几种方法可以解决这个“问题”(引用,因为它实际上不是问题,只是概念上的误解):

  • 告诉它不要使用ajax

    <p:commandButton ... ajax="false" />
    
    
    
  • 告诉它更新表单

    <p:commandButton ... update="@form" />
    
    
    
  • 替换为标准JSF组件,默认情况下不使用ajax

    <h:commandButton ... />
    
    
    

  • 请注意,这个具体问题与视图范围本身无关。在使用另一个作用域(包括请求作用域)时,您会遇到完全相同的问题(使用完全相同的解决方案)。

    为了避免显而易见的问题,此操作是否由ajax调用?因此,您是通过ajax调用操作,而不是通过ajax更新页面?不是。我尝试两种方式:普通方式和Ajax方式。正常的不起作用。通过ajax/重新渲染组件视图,可以很好地工作。我在firebug上看到HTML响应支持OK(通过正常调用),但视图也不刷新/更新。如何为JSF做好准备,请参见我们的JSF wiki页面@BalusC,我已经用我的代码编辑了我的文章。谢谢。默认情况下,
    会发送一个ajax请求。示例中的任何地方都没有使用
    ajax=“false”
    。因此,代码根本不符合问题描述。还是你根本不知道?无论如何,我根据目前发布的信息发布了一个答案。