2011-04-04 73 views
0

我有这样的一个facelet代码:JSF 2表单提交

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

的SearchBean的方法在bookService的豆叫如下:

@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(); 
    }  
} 

当我s ubmit表单,通过SearchBean的状态返回getSubmitted()方法总是返回false。我希望这会在表单提交时返回true。我不知道该怎么办。

FlashScoped在JSF 2中提交表单的唯一可用选项?任何专家关心评论。

回答

0

@RequestScoped表示上下文在servlet请求结束时被销毁。

尝试@FlashScoped的@ViewScoped。对于差别:考虑范围bean中

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

属性将继续下去,直到用户导航到一个新的观点:what's new in jsf 2

+0

我试图在项目中包含javax.faces.bean.ConversationScoped,但Eclipse查找合适,因为它无法解析类。我在哪里可以找到ConversationScoped类所在的jar。谢谢 – ChuongPham 2011-04-04 11:59:22

+0

你最后一次改变了你的答案。无论如何,根据我对@Matt的评论,对于getSubmitted()方法,使用@ViewScoped仍然返回false。 – ChuongPham 2011-04-04 12:21:20

+0

@ user463053:我确实。在我的第一个答案中做出了错误的假设。你确定表单被提交? – Fortega 2011-04-04 12:28:37

1

使用@ViewScoped,回到你的提交()方法返回null。从bean方法返回null将重新加载相同的视图并保持bean的状态。

更新:第一个问题:您是否从同一个视图调用BookService bean?否则,ViewScope将不起作用。您必须将提交的变量放在会话范围内。

请确保您的提交方法被调用(在方法内部使用断点进行调试)并确保您的表单元素由<form> ... </form>包围。

+0

谢谢。我用@ViewScoped试过了你的建议,但我仍然为getSubmitted()方法返回false。 – ChuongPham 2011-04-04 12:20:18

+0

你确定你的提交方法被调用吗?您可以调试并在该方法中设置断点。你的表单元素是由'

''''
'标签包围的吗?更新了我的答案。 – 2011-04-04 12:23:07

+0

我在提交方法中有调试语句,我可以看到该语句打印在控制台窗口中,因此我知道它已提交。是的,我确实在上面的Facelet代码周围有标签,BookService在相同的视图中被调用。另外,我已经更新了上面的BookService bean,以便您可以看到我想要做的事情。 – ChuongPham 2011-04-04 12:40:00