O que é Model in ModelAndView do Spring MVC?

86

Ter esta função básica

protected ModelAndView handleRequestInternal(...) {
    ...
    return new ModelAndView("welcomePage", "WelcomeMessage", message);
}

Eu sei que isso retornará modelandView. Eu sei que welcomePageé meu viewname, então isso significa que algo como welcomepage.jspserá chamado.

Mas estou confuso com o que é parte do modelo. O que é WelcomeMessagee messagecomo o modelo funciona nesse cenário?

Premraj
fonte

Respostas:

114

O modelo apresenta um espaço reservado para conter as informações que você deseja exibir na vista. Pode ser uma string, que está no exemplo acima, ou pode ser um objeto que contém várias propriedades.

Exemplo 1

Se você tem...

return new ModelAndView("welcomePage","WelcomeMessage","Welcome!");

... então no seu jsp, para exibir a mensagem, você fará: -

Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome!

Exemplo 2

Se você tem...

MyBean bean = new MyBean();
bean.setName("Mike!");
bean.setMessage("Meow!");

return new ModelAndView("welcomePage","model",bean);

... então em seu jsp, você pode fazer: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
limc
fonte
4
então isso significa que WelcomeMessage é o nome da variável a ser usado em jsp e "Welcome!" . Você pode me dizer onde posso encontrar outras coisas que o segundo argumento pode assumir, como agora eu entendo que ele leva o nome da variável, o nome do modelo, há alguma outra coisa que ele pode levar
4
O segundo argumento representa o nome lógico do seu modelo. Você pode chamá-lo do nome que quiser, mas esse é o nome que usará ao fazer referência ao seu modelo em seu JSP. No meu primeiro exemplo, chamei-o WelcomeMessage, no segundo exemplo, chamei-omodel . Use um nome que faça sentido para você. O terceiro argumento contém as informações ... pode ser uma string simples, ou um POJO ou um mapa ... basicamente qualquer informação útil que você deseja exibir na visualização.
limc de
24
new ModelAndView("welcomePage", "WelcomeMessage", message);

é uma abreviatura para

ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);

Olhando para o código acima, você pode ver que o nome da visualização é "welcomePage". Seu ViewResolver(geralmente configurado em .../WEB-INF/spring-servlet.xml) irá traduzir isso em uma visualização. A última linha do código define um atributo em seu model ( addObject("WelcomeMessage", message)). É aí que o modelo entra em jogo.

três xícaras
fonte
16

Tudo é explicado pelo javadoc para o construtor . É um construtor de conveniência que preenche o modelo com um par de atributo / valor.

Então ...

   new ModelAndView(view, name, value);

é equivalente a:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
Stephen C
fonte
14

Aqui, neste caso, temos 3 parâmetros no Método, a saber, ModelandView .
De acordo com esta questão, o primeiro parâmetro é facilmente compreendido. Ele representa a Visualização que será exibida ao cliente.
Os outros dois parâmetros são como O Ponteiro e o Suporte
Portanto, você pode resumir assim

ModelAndView ( View, Pointer, Holder );

O Pointer apenas aponta as informações no The Holder

Quando o Controlador vincula a Visualização com essas informações, então no referido processo, você pode usar o Ponteiro na página JSP para acessar as informações armazenadas no Detentor para exibir essas informações respeitadas ao cliente.
Aqui está a representação visual do processo respeitado.

return new ModelAndView("welcomePage", "WelcomeMessage", message);

insira a descrição da imagem aqui

Tahir Hussain Mir
fonte
2

Bem, WelcomeMessage é apenas um nome de variável para mensagem (modelo real com dados). Basicamente, você está vinculando o modelo com welcomePage aqui. O modelo (mensagem) estará disponível em welcomePage.jsp como WelcomeMessage. Aqui está um exemplo mais simples:

ModelAndView("hello","myVar", "Hello World!");

Nesse caso, meu modelo é uma string simples (em aplicativos, será um POJO com dados buscados para o banco de dados ou outras fontes). Estou atribuindo a myVar e minha visualização é hello.jsp. Agora, myVar está disponível para mim em hello.jsp e posso usá-lo para exibição.

Na visualização, você pode acessar os dados:

${myVar}

Da mesma forma, você poderá acessar o modelo por meio da variável WelcomeMessage.

Abdel Raoof
fonte
0

ModelAndView: o próprio nome explica que é uma estrutura de dados que contém dados de modelo e visualização.

Map() model=new HashMap(); 
model.put("key.name", "key.value");
new ModelAndView("view.name", model);

// or as follows

ModelAndView mav = new ModelAndView();
mav.setViewName("view.name");
mav.addObject("key.name", "key.value");

se o modelo contém apenas um único valor, podemos escrever da seguinte forma:

ModelAndView("view.name","key.name", "key.value");
Premraj
fonte
0
@RequestMapping(value="/register",method=RequestMethod.POST)
   public ModelAndView postRegisterPage(HttpServletRequest request,HttpServletResponse response,
           @ModelAttribute("bean")RegisterModel bean)
   {
       RegisterService service = new RegisterService();
       boolean b = service.saveUser(bean);

       if(b)
       {
           return new ModelAndView("registerPage","errorMessage","Registered Successfully!");
       }
       else
       {
           return new ModelAndView("registerPage","errorMessage","ERROR!!");
       }
   }



/*  "registerPage" is the .jsp page -> which will viewed.
/* "errorMessage" is the variable that could be displayed in page using -> **${errorMessage}**
/* "Registered Successfully!" or "ERROR!!" is the message will be printed based on **if-else condition**
Sunil
fonte