JSF 2提交表格

时间:2011-04-04 11:38:28

标签: jsf-2 form-submit

我有这个Facelet代码:

<h:inputText id="searchtext" value="#{SearchBean.input}" />
<h:commandButton value="#{msg.BUTTON_SEARCH_LABEL}" title="#{msg.BUTTON_SEARCH_LABEL}"
  action="#{SearchBean.Submit}" />

SearchBean 包含以下内容:

@ManagedBean(name = "SearchBean")
@RequestScoped
public class SearchBean implements Serializable
{
    private String input = null;
    private Boolean submitted = false; 

    public String getInput() {
       return input;
    }

    public boolean getSubmitted() {
       return submitted;
    }      

    public void setInput(String input) {
       this.input = input;
    }

    public void setSubmitted(Boolean submitted) {
       this.submitted = submitted;
    }

    public String Submit() {
       System.out.println(">>> SUBMITTED <<<"); 
       submitted = true;
       return "";
   }    
}

BookService bean中调用SearchBean的方法如下:

@Stateless
public class BookService()
{
    @Inject
    private SearchBean searchBean;

    @PostConstruct
    public void init()
    {
       Boolean isSearch = isSubmitted();
       if (isSearch) {
          // some codes
       } else {
          // other codes
       }
    }

    public Boolean isSubmitted() {
       System.out.println("STATUS: " + searchBean.getSubmitted()); 
       return searchBean.getSubmitted();
    }       
}

当我提交表单时,SearchBean的 getSubmitted()方法返回的状态始终返回 false 。我希望在提交表单时返回 true 。我不知道该怎么做。

FlashScoped 是JSF 2中表单提交的唯一可用选项吗?任何专家都要发表评论。

2 个答案:

答案 0 :(得分:1)

使用@ViewScoped并在submit()方法中返回null:

public String Submit() {
       submitted = true;
       return null;
}    

视图作用域中bean内的属性将持续存在,直到用户导航到新视图。从bean方法返回null将重新加载相同的视图并保持bean的状态。

更新:第一个问题回复:您是否从同一个视图调用了BookService bean?如果没有,ViewScope将无法工作。您必须将提交的变量放在会话范围中。

确保调用submit方法(在方法内部使用断点进行调试)并确保表单元素由<form> ... </form>括起。

答案 1 :(得分:0)

@RequestScoped意味着在servlet请求结束时销毁了上下文。

尝试使用@FlashScoped的@ViewScoped。差异:what's new in jsf 2