我有2个jsf页面,每个页面都有一个托管bean。
我正在从第二页导航到第一页,并希望销毁其中的实体对象。我的问题是,在我将其设置为null之后,它仍然会进入创建新实体的getDetails
方法。
如何在退出此页面时阻止它转到getDetails
方法?
我怎样才能正确销毁这个实体?我做错了吗?
这是我的代码:
public class page2MB {
@EJB
private page2SessionBean page2SessionBean;
private Page2 page2;
public page2MB() {
}
public Page2 getDetails()
{
if(page2 == null)
{
Map requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
page2 = new Page2();
page2.setPage2PK(new Page2PK(Short.parseShort((String)requestParams.get("param1")),
Short.parseShort((String)requestParams.get("param2"))));
page2 = page2SessionBean.find(page2);
}
return page2;
}
public String exit()
{
try
{
page2 = null;
return "page1";
}
catch(Exception exp)
{
exp.printStackTrace();
return "";
}
finally
{
}
}
}
page2.xhtml:
<f:view>
<h:form>
<h:panelGrid columns="2">
<h:inputText id="page2PKfield1" value="#{page2MB.details.page2PK.field1}"/>
<h:inputText id="page1MBfield1" value="#{page1MB.details.field1}"/>
<h:inputText id="page2MBfield2" value="#{page2MB.details.page2PK.field2}"/>
<h:inputText id="field2Desc" value="#{page2MB.details.field2Desc}"/>
</h:panelGrid>
<h:commandButton id="exit" value="יציאה" action="#{page2MB.exit}" immediate="true"></h:commandButton>
</h:form>
</f:view>
感谢提前。
答案 0 :(得分:2)
因为它必须是会话作用域。我在此页面上有更多操作,需要处于会话范围模式。
不要在最广泛的范围内将属于不同范围的数据混合到单个bean中。在不同的范围内创建单独的bean,这些bean适用于bean持有的数据,并使用@ManagedProperty
将另一个bean注入另一个bean。
@ManagedBean
@SessionScoped
public class SessionBean {
private Object sessionData;
// ...
}
@ManagedBean
@ViewScoped
public class ViewBean {
@ManagedProperty("#{sessionBean}")
private SessionBean sessionBean;
private Object viewData;
// ...
}
也不要在吸气剂中做生意。而是在@PostConstruct
方法中进行。