我正在使用JSF2.0并且我在该数据表中创建一个dataTable我从托管bean获取值。在post构造的annoted方法中的托管bean我从另一个文件调用我的Web服务。
以下是该代码的代码
<h:dataTable
value="#{bean1.getList}" var="c" styleClass="order-table"
headerClass="order-table-header" width="100%"
rowClasses="order-table-odd-row,order-table-even-row" rows="8"
columnClasses="first,second">
<h:column>
<f:facet name="header">
<h:selectBooleanCheckbox></h:selectBooleanCheckbox>
</f:facet>
<h:selectBooleanCheckbox value="#{c.id}"></h:selectBooleanCheckbox>
</h:column>
<h:column>
<!-- <f:facet name="header"/> -->
<h:outputLabel value="From: "></h:outputLabel>
<h:outputLabel value="#{c.from}"></h:outputLabel>
<br></br>
<!-- -->
<h:outputLabel value="Sub: "></h:outputLabel>
<h:outputLabel value="#{c.sub}"/>
<h:commandLink immediate="true" action="#{bean2.doRead}" value="Read" id="Read"></h:commandLink>
</h:column>
<!-- Footer Setting -->
<f:facet name="footer">
</f:facet>
</h:dataTable>
我的Bean1类
@PostConstruct
public void prepareList(){
{
web service call
}
public List<InboxBean> getemailList(){
return list;
}
现在当我点击那个id为read的commandlink时,我的bean1 post构造的taged属性也被调用了。我不想表演。那么,如何摆脱这个问题,我也想在bean2 setProperty中设置主题值。提前致谢
答案 0 :(得分:3)
如果将bean放入请求范围,则会发生这种情况。然后,每个HTTP请求都将重建bean。将bean放在视图或会话范围中。
E.g。在视图范围内:
@ManagedBean
@ViewScoped
public class Bean {}
只要您通过在操作方法中返回null
或void
与同一视图进行交互,视图范围内的bean就会存在。
或在会话范围内:
@ManagedBean
@SessionScoped
public class Bean {}
会话范围的bean与已建立的浏览器会话一样长。也就是说,从第一个涉及bean的HTTP请求开始,直到客户端关闭整个浏览器实例,或者当会话在服务器端到期时(默认为30分钟)。
对于您的特定情况,视图范围的bean很可能是最佳选择。