У меня есть страница jsf, которая состоит из 2 частей: таблица, отображающая список записей и диалоговое окно для добавления новой записи. Я добавил некоторые функции проверки, но я не могу заставить их работать правильно. мне это нужно, чтобы:Разговорное значениеScope не обновляется после начала разговора
1) Ошибка проверки не появится первый диалог показывает время до
2) Если какая-либо ошибка проверки происходит, держать его открытым и показывать сообщения об ошибках.
3) Если ошибка проверки и исходный код не выполнены успешно, обновите таблицу.
Это то, что у меня есть:
<h:body>
<h:form id="form01">
<p:dataTable id="tbl1" value="#{welcomeController.teams}" var="team" >
<p:column headerText="Id">
<h:outputText value="#{team.seq}" />
</p:column>
<p:column headerText="Name">
<h:outputText value="#{team.name}" />
</p:column>
</p:dataTable>
<p:dialog id="teamDialog" closable="false" visible="#{welcomeController.addMode}"
widgetVar="teamDialog_w" modal="true" resizable="false" draggable="true"
header="New Team Detail">
<p:messages />
<p:panelGrid columns="2">
<h:outputText value="Name" />
<p:inputText id="name" value="#{welcomeController.newTeam.name}" />
</p:panelGrid>
<p:commandButton value="Submit" ajax="true" actionListener="#{welcomeController.addNewTeam}"
update=":form01"oncomplete="teamDialog_w.hide(); console.log(args);" />
</p:dialog>
<p:commandButton value="ADD" actionListener="#{welcomeController.startAdd}"
oncomplete="teamDialog_w.show(); console.log(args);" update="teamDialog" />
</h:form>
боб:
@Named
@ConversationScoped
public class WelcomeController implements Serializable {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final long serialVersionUID = 1L;
private List<TeamDto> teams;
@Inject SessionManager sessionMan;
@Inject DatabaseUtil dbCache;
@Inject TeamService teamService;
@Inject Conversation conversation;
private TeamDto newTeam = new TeamDto();
private boolean addMode = false;
public List<TeamDto> getTeams() throws IOException {
if (teams == null || teams.size() == 0) {
teams = teamService.getAll();
}
return teams;
}
public void setTeams(List<TeamDto> teams) {
this.teams = teams;
}
public void reload() {
conversationBegin();
}
public void conversationBegin() {
if (conversation.isTransient()) {
conversation.begin();
}
}
public void conversationEnd() {
if(!conversation.isTransient()){
conversation.end();
}
}
public void startAdd() {
reload();
newTeam = new TeamDto();
addMode = true;
}
public TeamDto getNewTeam() {
return newTeam;
}
public void setNewTeam(TeamDto newTeam) {
this.newTeam = newTeam;
}
public void addNewTeam() throws IOException, ValidatorException {
if (newTeam.getName().isEmpty()) {
sessionMan.addGlobalMessageFatal("INVALID INFO", null);
return;
}
teamService.addTeam(newTeam);
teams.add(newTeam);
newTeam = new TeamDto();
addMode = false;
}
public boolean isAddMode() {
return addMode;
}
public void setAddMode(boolean addMode) {
this.addMode = addMode;
}
}
У меня есть 2 проблемы здесь:
1) После того, как я подам пустую строку, Я ожидаю, что диалог все еще откроется (потому что addMode - это правда), но это не так. Почему это?
2) Если я ставлю на кнопку «Добавить», как это:
<p:commandButton value="ADD" actionListener="#{welcomeController.startAdd}" oncomplete="teamDialog_w.show(); console.log(args);" >
<f:ajax render="teamDialog" />
</p:commandButton>
по крайней мере, когда я снова открыть диалог, я могу увидеть сообщение об ошибке. Но в моем коде я не вижу сообщение об ошибке. Почему это так? Разве они не эквивалентны?
Есть ли что-то не так с моим пониманием?
Пожалуйста, помогите. Большое спасибо.