Почему я больше всего выбираю @SessionScope для бэк-бина, пока он мне не нужен?
У меня есть BackingBean MemberSearchControler
, У него есть метод search
, Когда пользователь вызывает его, он извлекает всех членов из базы данных и сохраняет в List
также храните все идентификаторы членов в массиве int. Затем верните результат member, ссылающийся на страницу member.xhtml.
В следующем вы можете увидеть MemberSearchControler
:
@ManagedBean(name="MemberSearchControler")
public class MemebrSearchControl {
private String text;
private List<Member> members;
//For Create CheckBox
private int[] membersId;
public int[] getMembersId() {
return membersId;
}
//For get Selected Member Id
private int[] selectedMembers;
public void setSelectedMember(int[] ids) {
selectedMembers=ids;
}
public List<Member> getMembers() {
return members;
}
public int getMembersCount() {
return membersCount;
}
private int membersCount;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String search() throws DaoImplNotFoundException, DataSourceException{
MemberDao dao=(MemberDao) Factory.getDao(ConfigReader.getConfig().getProperty("dao.member"));
members=dao.list(1, 10);
membersId=new int[members.size()];
for(int i=0;i<members.size();i++)
membersId[i]=members.get(i).getId();
return "member";
}
public String view(){
return "view";
}
}
в member.xhtml
Я показываю данные участников, и у меня есть несколько флажков, которые возвращают идентификатор каждого участника. Вы можете увидеть member.xhtml в следующем:
<ui:define name="center-content">
<h:form id="members">
<div class="panel panel-primary rgt">
<!-- Default panel contents -->
<div class="panel-heading">
<div style="float: left;">
<h:commandLink styleClass="btn btn-primary table-button" id="btnView" action="#{ViewMemberControler.view}">
<h:graphicImage library="img" name="view.png"
styleClass=" table-icon" />
</h:commandLink>
<h:commandLink styleClass="btn btn-primary table-button" id="btnEdit">
<h:graphicImage library="img" name="edit-member.png"
styleClass=" table-icon" />
</h:commandLink>
<h:commandLink styleClass="btn btn-primary table-button" action="add">
<h:graphicImage library="img" name="add-member.png"
styleClass=" table-icon" />
</h:commandLink>
</div>
<h4>
<h:outputText value="#{msg['protected.member.table']}" />
</h4>
</div>
<!-- Table -->
<t:selectManyCheckbox id="member" value="#{ViewMemberControler.selectedIds}" layout="spread" >
<f:selectItems value="#{MemberSearchControler.membersId}" itemLabel="" />
</t:selectManyCheckbox>
<h:dataTable styleClass="table table-condensed table-hover rgt"
value="#{MemberSearchControler.members}" var="member" id="checkall">
<h:column headerClass="cell-10">
<f:facet name="header">
<h:selectBooleanCheckbox onchange="toggle(this)"/>
</f:facet>
<t:checkbox for=":members:member" index="#{CounterControler.index}"/>
</h:column>
<h:column headerClass="cell-15">
<f:facet name="header">
<p>
<h:outputText value="#{msg['protected.member.table.family']}" />
</p>
</f:facet>
<span>#{member.lastName}</span>
</h:column>
<h:column headerClass="cell-20">
<f:facet name="header">
<p>
<h:outputText value="#{msg['protected.member.table.name']}" />
</p>
</f:facet>
<span>#{member.firstName}</span>
</h:column>
<h:column headerClass="cell-20">
<f:facet name="header">
<p>
<h:outputText
value="#{msg['protected.member.table.share.count']}" />
</p>
</f:facet>
<span>#{member.shareCount}</span>
</h:column>
<h:column headerClass="cell-35">
<f:facet name="header">
<p>
<h:outputText
value="#{msg['protected.member.table.phone.number']}" />
</p>
</f:facet>
<span>#{member.phone}</span>
</h:column>
</h:dataTable>
</div>
</h:form>
</ui:define>
</ui:composition>
Как вы можете видеть в приведенном выше коде я отправляю флажки, которые пользователь выбрал для ViewMemberControler
не для MemberSearchControler
, Теперь у меня есть вопрос. Почему я больше всего использую аннотацию @SessionScoped для MemberSearchControler
? если я выберу @RequestScoped, отправьте выбранные значения флажка в ViewMemberControler
будет провал и посмотреть member.xhtml
страница снова (но в это время без каких-либо данных).