Я использую zk ce версии 6.5, и у меня есть проблема. Мои страницы входа/индекса загружаются дважды.моя страница входа/индекса zul загружается дважды, где, как я только называю это один раз
, когда я на кнопку выхода из системы называют это:
Executions.createComponents ("Вход", центр, нуль);
Наверху страницы есть два поля, и я использую подход MVVM.
Теперь он загружается нормально, но как только я ввожу имя пользователя в текстовое поле или вводя пароль в текстовое поле, страница автоматически обновляется. Я проверил в своем коде, я не называю этот метод нигде в процессе здесь.
Пожалуйста, скажите мне, почему текстовое поле textbox/password я получаю это поведение для страницы входа. как только он перезагружается дважды, он получает имя пользователя и переводит меня на домашнюю страницу. теперь я выхожу и тот же сценарий.
2 раза, я получаю вызов этому методу, когда-то очевидно, bacause при выходе из системы я назвал его, но при вводе любого текста в текстовое поле и снятии фокуса с него. то этот метод снова называется.
@AfterCompose
public void afterCompose(@ContextParam(ContextType.VIEW) Component view){
Selectors.wireComponents(view, this, false);
}
Я также проверил свой код, на каком-либо текстовом поле нет события.
login.zul
<zk>
<window id="loginWin" border="none" width="100%" height="100%"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vmc') @init('com.example.LoginViewModel')"
validationMessages="@id('vmsgs')">
<borderlayout>
<west border="normal" size="70%" title="What Intelliops Do?">
<div width="100%" height="100%">
asdasd as asd a d asdasd a sd asd asasd asd d asdasd as
d a d asdasd a sd asd asasd asd a d asdasd a sd asd
asasd asd a d asdasd a sd asd asasd asd
</div>
</west>
<east border="normal" size="30%" title="Login">
<div width="100%" height="100%">
<grid sizedByContent="true"
form="@id('lv') @load(vmc.userDto)
@save(vmc.userDto, before='loginButtonInvoke')
@validator('com.example.LoginValidator')">
<columns>
<column width="50%"></column>
<column width="50%"></column>
</columns>
<rows>
<row align="left" width="100%"
style="background:white;.row:hover{background-color: #fff};border:none">
<cell style="text-align:right">
User Name
</cell>
<cell>
<textbox id="userNameTextBox" type="text"
value="@bind(lv.user.username)" maxlength="50" />
<image src="@load(vmsgs['userNameTextBoxError'])" width="12px"
height="12px" tooltiptext="@load(vmsgs['userNameTextBox'])"></image>
</cell>
</row>
<row width="100%"
style="background:white;.row:hover{background-color: #fff};border:none">
<cell style="text-align:right">
Password
</cell>
<cell>
<textbox id="passwordTextBox" type="password"
value="@bind(lv.user.password)" maxlength="20" />
<image src="@load(vmsgs['passwordTextBoxError'])" width="12px"
height="12px" tooltiptext="@load(vmsgs['passwordTextBox'])" />
</cell>
</row>
<row width="100%"
style="background:white;.row:hover{background-color: #fff};border:none">
<cell style="text-align:right">
<button id="loginButton" label="Login"
onClick="@command('loginButtonInvoke')" />
</cell>
<cell>
<label id="loginErrorLabel" style="color:red" />
</cell>
</row>
<row spans="2" width="100%"
style="background:white;.row:hover{background-color: #fff};border:none">
<cell colspan="2" style="text-align:right">
<a id="forgetPasswordLink">
Forgot Password?
</a>
</cell>
</row>
</rows>
</grid>
</div>
</east>
</borderlayout>
</window>
</zk>
loginviewmode класс
package com.example;
import org.apache.log4j.Logger;
import org.zkoss.bind.annotation.AfterCompose;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ContextParam;
import org.zkoss.bind.annotation.ContextType;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.Selectors;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zkplus.spring.SpringUtil;
import org.zkoss.zul.Label;
import org.zkoss.zul.Textbox;
import com.example.UserDTO;
import com.example.IUserService;
import example.Pages;
import example.TemplateUtil;
import example.UserUtil;
public class LoginViewModel{
private Logger logger = Logger.getLogger(this.getClass().getName());
IUserService userService = (IUserService)SpringUtil.getBean("userService");
UserDTO userDto = new UserDTO();
private static final String USER_ROLES = "userRoles";
private static final String MASTER = "master";
@Wire("#userNameTextBox")
Textbox userNameTextBox;
@Wire("#passwordTextBox")
Textbox passwordTextBox;
@Wire("#loginErrorLabel")
Label loginErrorLabel;
@AfterCompose
public void afterCompose(@ContextParam(ContextType.VIEW) Component view){
Selectors.wireComponents(view, this, false);
}
@Command("loginButtonInvoke")
public void loginButtonInvoke(){
logger.info("LoginViewModel:afterCompose >>>>>>>>>>>>>>>");
logger.info("loginButtonInvoke: " + userDto.getUserIntelliOps().getUsername() + " " + userDto.getUserIntelliOps().getPassword());
userDto = userService.getUserAuthentication(userDto);
if(userDto!=null){
UserUtil.setSession(userDto);
logger.info("loginButtonInvoke:userDto!=null ");
/*List<ViewObjectOperation> list = userService.getAllOtherOperationsService().userAuthorizationMatrix(userDto.getUserIntelliOps().getRoles().get(0).toString());*/
//List<ViewObjectOperation> list = userService.getAllOtherOperationsService().userAuthorizationMatrix(3+"");
//logger.info("asdasdas " + list.size());
/*getUserAuthorizedMenu*/
//TODO what is the following line doing here????
userService.getUserAuthorizedMenu();
TemplateUtil.loadContent(Pages.HOME_FILE,true);
}else{
if(userDto==null){
userDto = new UserDTO();
}
loginErrorLabel.setValue("Invalid username or password.");
}
}
public UserDTO getUserDto() {
return userDto;
}
public void setUserDto(UserDTO userDto) {
this.userDto = userDto;
}
}
TemplateUtil класс для отрисовки страниц
package com.example;
import org.apache.log4j.Logger;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Path;
import org.zkoss.zul.A;
import org.zkoss.zul.Borderlayout;
import org.zkoss.zul.Button;
import org.zkoss.zul.Center;
import org.zkoss.zul.Include;
import org.zkoss.zul.North;
public class TemplateUtil {
static Logger logger = Logger.getLogger(TemplateUtil.class.getName());
public static void loadContent(String contentPage, boolean isMenu) {
logger.info("TemplateUtil: loadContent().......... ");
Borderlayout mainlayout = (Borderlayout) Path.getComponent("/main/mainLayout");
North topHeader = mainlayout.getNorth();
topHeader.getFellow("menuDiv").setVisible(isMenu);
//TODO remove the following logger
if(isMenu==true){
anchorUsername.setLabel(UserUtil.getUserName());
logger.info("isMenu==true....");
Executions.createComponents(Pages.MENU_FILE, topHeader.getFellow("menuDiv"), null);
UserUtil.setSession(true);
}
topHeader.invalidate();
Center center = mainlayout.getCenter();
center.getChildren().clear();
logger.info("contentPage: " + contentPage);
Executions.createComponents(contentPage, center, null);
}
}
, пожалуйста, помогите мне в этом
Позвольте мне обновить вас. 1. первый раз без обновления 2. после входа в систему, когда я нахожусь на выходе и перехожу на страницу входа, как только я добавлю значение в любое текстовое поле, страницы обновляются. никакое действие не записывается ни в одном из этих полей.
Привет Вики, если вы можете предоставить [SSCE] (http://sscce.org/), вы, скорее всего, быстро получите решение от сообщества. –
Что такое SSCE ???? – vicky
Нажмите на ссылку. Это «лучшая практика» для публикации вопросов по StackOverflow. Если вы можете предоставить сообществу самостоятельный рабочий пример, вы получите лучшую помощь от других. Помимо облегчения для других воссоздать и отлаживать проблему, это также любезность, которая ценится; люди любят видеть хорошо поставленный вопрос и будут более склонны тратить время на помощь. –