2012-12-09 30 views
1

我在GAE上執行spring mvc + primeFaces時出現問題,我認爲除了當我嘗試通過發送post來修改我的bean的值時,所有工作都正常,值保持與以前相同。下面是代碼:GAE上的Spring mvc + JSF

的web.xml

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/main-servlet.xml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Production</param-value> 
    </context-param> 

    <context-param> 
     <param-name>com.sun.faces.enableThreading</param-name> 

     <param-value>false</param-value> 

     </context-param> 



    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 



<servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 



    <listener> 
    <listener-class> 
     com.remote.control.web.ApiKeyInitializer 
    </listener-class> 
    </listener> 


    <servlet> 
     <servlet-name>main</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>main</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 



<servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 



    <security-constraint> 
     <web-resource-collection> 
      <url-pattern>/home</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>*</role-name> 
     </auth-constraint> 
    </security-constraint> 




    <servlet> 
    <servlet-name>SystemServiceServlet</servlet-name> 
    <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class> 
    <init-param> 
    <param-name>services</param-name> 
    <param-value/> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>SystemServiceServlet</servlet-name> 
    <url-pattern>/_ah/spi/*</url-pattern> 
</servlet-mapping> 
</web-app> 

主servlet.xml中

<?xml version="1.0" encoding="UTF-8"?> 

    <beans> 

    <context:component-scan base-package="com.remote.control.controller" /> 
    <context:component-scan base-package="com.remote.control.service" /> 

    <mvc:annotation-driven /> 

    <mvc:resources mapping="/res/**" location="/WEB-INF/res/" /> 



    <bean 
     id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" > 

     <property 
      name="prefix" 
      value="/WEB-INF/jsp/" /> 

     <property 
      name="suffix" 
      value=".xhtml" /> 
    </bean> 


</beans> 

faces-config.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config > 

    <application> 
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 

    </application> 




</faces-config> 

HomeController.java

@Controller 
public class HomeController { 

     private Logger logger = Logger.getLogger(getClass().getName()); 

     @Autowired 
     Bean bean; 


    @RequestMapping(value="/home", method=RequestMethod.GET) 
    public ModelAndView homeGet() { 
     ModelAndView mv=new ModelAndView("index"); 
     bean.setParam1("111111111"); 
     bean.setParam2("22222222222"); 
     bean.setParam3("3333333333"); 
     mv.addObject("task",bean);  
     return mv; 
    } 


    @RequestMapping(value="/home", method=RequestMethod.POST) 
    public ModelAndView homePost() { 
     ModelAndView mv=new ModelAndView("index"); 

      logger.warning("param1"+ bean.getParam1()); 
      logger.warning("param2" + bean.getParam2()); 
      logger.warning("param3" + bean.getParam3()); 

      mv.addObject("task",bean); 

    } 


} 

Bean.java

@Component 
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS) 
public class Bean implements Serializable { 


    private String param1; 
    private String param2; 
    private String param3; 
    public String getParam1() { 
     return param1; 
    } 
    public void setParam1(String param1) { 
     this.param1 = param1; 
    } 
    public String getParam2() { 
     return param2; 
    } 
    public void setParam2(String param2) { 
     this.param2 = param2; 
    } 
    public String getParam3() { 
     return param3; 
    } 
    public void setParam3(String param3) { 
     this.param3 = param3; 
    } 



} 

的index.xhtml

<html> 

<ui:composition template="baseLayout.xhtml"> 
    <ui:define name="content"> 

       <form action="home" method="post"> 
       <h:panelGrid style="margin-top:20px;" columns="2" cellpadding="10"> 

        <p:outputPanel autoUpdate="true"> 

         <p:inputText value="#{task.param1}" /> 
         <p:inputText value="#{task.param2}" /> 


         <p:inputTextarea value="#{task.param3}" id="text" rows="10" cols="50" /> 

        </p:outputPanel> 




       </h:panelGrid> 
       <button value="submit" /> 

      </form> 


    </ui:define> 
</ui:composition> 


</html> 
+1

嘗試'H:form'和'H:commandButton'代替' Daniel

+0

不能使用H:形式因爲它沒有動作參數,它不發送帖子來糾正url – Gelu

+0

爲什麼不使用'action'屬性來指定bean中的bean方法來處理提交的值? – Daniel

回答

0

只要打開

<form action="home" method="post"> 
    <h:panelGrid style="margin-top:20px;" columns="2" cellpadding="10"> 
     <p:outputPanel autoUpdate="true"> 

      <p:inputText value="#{task.param1}" /> 
      <p:inputText value="#{task.param2}" /> 

      <p:inputTextarea value="#{task.param3}" id="text" rows="10" cols="50" /> 

     </p:outputPanel> 
    </h:panelGrid> 
    <button value="submit" /> 

</form> 

進入

<h:form> 
    <h:panelGrid style="margin-top:20px;" columns="2" cellpadding="10"> 
     <p:outputPanel autoUpdate="true"> 

      <p:inputText value="#{task.param1}" /> 
      <p:inputText value="#{task.param2}" /> 

      <p:inputTextarea value="#{task.param3}" id="text" rows="10" cols="50" /> 

     </p:outputPanel> 
    </h:panelGrid> 
    <p:commandButton value="submit" action="#{task.myMethod}"/> 

</h:form> 

以下方法

public void myMethod(){ 
    System.out.println(param1); 
    System.out.println(param2); 
    System.out.println(param3); 
} 
+0

它仍然不行,我改變了它,正如你所建議的那樣,它在網絡瀏覽器中顯示出很好的值,但是在控制器中,後處理仍舊是舊的值,除非我發送下一篇文章,否則它們不會改變。我也做了一個方法:public void submitHandler2(ActionEvent e){ \t \t param1 =「kkakakakakakakaka2」; \t \t}但它仍然只能在第二篇文章後纔有效。我真的不知道這裏會發生什麼,P – Gelu