2015-12-31 2 views
1

Я работаю над Spring WebApplication. У меня есть форма с одним вводом, текстовой линией. Я хочу получить этот текст и использовать его где-то еще.Spring // JSP // Обработка формы - использование @ModelAttribute на String

Так что вопрос довольно прост: есть ли способ, я могу использовать текст строки @ModelAttribute String в методе контроллера, чтобы избежать использования вспомогательного класса?

Так я хочу сделать это:

@RequestMapping(value="/url", method = RequestMethod.POST) 
     public String handler(@ModelAttribute("inputtext") String inputtext, Model model) 
     { 
      sout(inputtext); 
} 

С формой, как это:

<form:form method="POST" action="url" commandName="inputtext"> 
    <table> 
    <tr> 
     <td><form:label path="???">The text</form:label></td> 
     <td><form:input path="???"/></td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <input type="submit" value="Submit"/> 
     </td> 
    </tr> 
</table> 
</form:form> 

Если это возможно, то, что бы я использовать для "пути"?

Спасибо!

ответ

1

Ваш вопрос не ясен, но path= предназначен для установки свойство к модели класса, где ваша форма получить связанной с. Если вы не сделаете какие-либо обязательные действия из этой формы в классе модели, вместо того, чтобы вы просто хотите передать строку, то не используйте @ModelAttribute но @RequestParam вместо этого,

@RequestMapping(value="/url", method = RequestMethod.POST) 
public ModelAndView takeTheString(@RequestParam("inputtext") String inputtext) {  
      String temp_input =inputtext; 

     // By "sout" you mean "System.out.println()" right? 
     System.out.println(temp_input); 
    } 

или с просьбой объект

@RequestMapping(value="/url", method = RequestMethod.POST) 
public ModelAndView takeTheString(HttpServletRequest request, HttpServletResponse response) {    
      String temp_input =request.getParameter("inputtext"); 
      System.out.println(temp_input); 
    } 

And The @ModelAttribute предполагается аннотированный к связанной модели, как:

@ModelAttribute("userForm") UserBean user 

Это пользователь - это то, что я имел в виду под модельным классом.

В соответствии с просьбой в соответствии с комментарием:

enter image description here

web.xml:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <servlet> 
     <servlet-name>springmvc</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>springmvc</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 
</web-app> 

SpringMVC-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-4.0.xsd 
          http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
    <context:component-scan base-package="com" /> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
</beans> 

index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <form action="output.html" method="post"> 
      <input type="text" name="yourtext" value=""> 
      <input type="submit" value="go">   
     </form> 
    </body> 
</html> 

output.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     text = ${name}  
    </body> 
</html> 

InputController.java:

package com.controller; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class InputController { 
    @RequestMapping(value = "/output", method = RequestMethod.POST) 
    public ModelAndView takeTheString(@RequestParam("yourtext") String name) { 
     System.out.println("String you've passed = "+name); 
     return new ModelAndView("output", "name", name); 
    } 
} 
+0

Здравствуйте и спасибо за ваш ответ , Я думаю, что вы получили мой вопрос правильно :) Я уже думал об использовании '@ RequestParam', но я не понимаю, что делать в JSP.Насколько я понимаю, '@ RequestParam' правильно получает параметры из URL? Итак, как передать содержимое моего поля ввода в контроллер? (И sout = System.out.println() yes :)) – Heady

+0

Если нет активности привязки (что вы подразумеваете под вспомогательным классом), то не используйте * * префикс перед этими тегами, просто используйте обычные теги HTML , ex: '', затем в контроллере поймайте его с помощью '@RequestParam (" myname ") String myName', затем выведите это * myName * (примечание что вывод находится в консоли сервера, Tomcat, Glassfish или там, где вы там работаете), потому что если вы используете * *, значит, '' path = "' is * обязательный *, тогда как привязка отсутствует (поскольку * путь = * должен ссылаться на атрибут класса связующего). –

+0

Спасибо .. Ну, это очень просто: D По какой-то причине я просто не думал о том, чтобы не использовать ''. Если вы хотите, вы можете опубликовать это в качестве ответа/добавить это к своему ответу, чтобы я мог его пометить. – Heady

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