我有这个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中表单提交的唯一可用选项吗?任何专家都要发表评论。
答案 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