我在JSF中有一个数据表,当用户选择下拉菜单时会填充该数据表。表显示的列表来自辅助bean。此辅助bean位于会话范围内。因此,当用户点击网页的其他链接并返回此页面时,它仍会显示数据列表中包含先前选择的数据。
问题是 - 如何确保当用户离开页面时数据被重置,以便当用户重新进入时,他们可以看到一个没有数据的新页面。
我不能将支持bean放在请求范围内,因为这样就不可能有购物车类型的应用程序。
答案 0 :(得分:4)
将datamodel保留在会话范围bean中,添加一个请求范围的bean,它从会话范围bean复制引用,并让表单提交给该请求范围的bean,并让视图使用请求范围的bean。您可以在每个托管属性注入下从请求范围内的bean中访问会话范围的bean。 E.g。
<managed-bean>
<managed-bean-name>cart</managed-bean-name>
<managed-bean-class>com.example.Cart</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>showCart</managed-bean-name>
<managed-bean-class>com.example.ShowCart</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>cart</property-name>
<value>#{cart}</value>
</managed-property>
</managed-bean>
其中ShowCart
可能如下所示:
public class ShowCart {
private Cart cart;
private Cart show;
// +getters+setters
public String submit() {
show = cart;
// ...
}
}
,视图使用#{showCart.show}
代替。