Я использую Jboss. У меня есть набор флажков, которые я создал через производителя (@Named, @SessionScoped
), данные поступают из базы данных mysql (с использованием гибернации). Когда я нажимаю флажок, я печатаю (p:growl
) сообщение (с p:ajax
) в соответствии с установленным флажком. Все это работает. Но каждый раз, когда я нажимаю checkbock, я вижу, что спящий режим выполняет МНОГИЕ ненужные запросы. На самом деле не должно быть SINGLE-запроса, выполняемого при нажатии флажка, поскольку метод, который я вызываю, принимает только profile
в качестве аргумента и отправляет сообщение из его поля.checkbox click выполняет многие запросы на спящий режим
Вот соответствующий код:
для JSF-часть:
<p:growl id="checkMessages" />
<p:dataTable var="_profile" value="#{profileProducer.getProfilesByFormAndName('test','test')}" >
<p:column>
<p:selectBooleanCheckbox value="#{orderController.checkedProfiles[_profile]}">
<p:ajax update="@([id$=checkMessages])" listener="#{profileProducer.profileCheck(_profile)}" />
</p:selectBooleanCheckbox>
</p:column>
</p:dataTable>
профиль контроллера:
@Named
@SessionScoped
public class ProfileController implements Serializable {
private List<Profile> temporaryCheckedProfileList = new ArrayList<Profile>();
public void profileCheck(Profile profile) {
System.out.println(profile);
String message = profile.getMessage();
if (message == null || message.equals(""))
return;
if (!temporaryCheckedProfileList.contains(profile)) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(message));
temporaryCheckedProfileList.add(profile);
} else {
temporaryCheckedProfileList.remove(profile);
}
}
}
profileProducer:
@RequestScoped
@Named
public class ProfileProducer {
@Inject
private ProfileRepository profileRepository;
@Inject
private GroupRepository groupRepository;
public List<Profile> getProfilesByFormAndName(@New String formName,@New String groupName) {
return profileRepository.getProfilesByGroup(groupRepository.getGroupByFormAndName(formName, groupName));
}
}
Они являются дие Риз, которые выполняются при открытии веб-сайт в первый раз (это правильное & ожидаемое поведение):
Hibernate: select * from group group0_ inner join form form1_ on group0_.form_id=form1_.id where group0_.name=? and form1_.name=? limit ?
Hibernate: select * from profile profile0_ inner join group_profile groupprofi1_ on profile0_.id=groupprofi1_.profile_id inner join group group2_ on groupprofi1_.group_id=group2_.id where group2_.id=1 order by groupprofi1_.sort_nr asc
Но когда я нажимаю флажок Я вижу, что оба запроса сверху выполняются много раз - для некоторые флажки он исполняет 15 раз, для других 25 раз и так далее ...
Что я делаю неправильно?