2013-03-07 2 views
1

Я использую zk ce версии 6.5, и у меня есть проблема. Мои страницы входа/индекса загружаются дважды.моя страница входа/индекса zul загружается дважды, где, как я только называю это один раз

  1. , когда я на кнопку выхода из системы называют это:

    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. после входа в систему, когда я нахожусь на выходе и перехожу на страницу входа, как только я добавлю значение в любое текстовое поле, страницы обновляются. никакое действие не записывается ни в одном из этих полей.

+0

Привет Вики, если вы можете предоставить [SSCE] (http://sscce.org/), вы, скорее всего, быстро получите решение от сообщества. –

+0

Что такое SSCE ???? – vicky

+0

Нажмите на ссылку. Это «лучшая практика» для публикации вопросов по StackOverflow. Если вы можете предоставить сообществу самостоятельный рабочий пример, вы получите лучшую помощь от других. Помимо облегчения для других воссоздать и отлаживать проблему, это также любезность, которая ценится; люди любят видеть хорошо поставленный вопрос и будут более склонны тратить время на помощь. –

ответ

1

Я не могу понять, почему вы делаете ...

Executions.createComponents("login", center, null); 

Когда вы собираетесь на логаута

Из моего понимания вы можете сделать эту вещь, как это ...

//Executions.getCurrent().getDesktop().invalidate();//Condition base if you needed use it otherwise dont use it 
Executions.getCurrent().getSession().invalidate(); 
Executions.sendRedirect("/login.zul"); 
+0

потому что у меня есть шаблон, в котором я внедряю login.zul, поэтому я его создаю. – vicky

+0

Даже я не понимаю, почему бы вам не попробовать мой код? –

+0

Я обязательно попробую ваш код и дам вам знать, как это происходит. – vicky

Смежные вопросы