GAE上的Spring mvc + JSF [英] Spring mvc + JSF on GAE

查看:132
本文介绍了GAE上的Spring mvc + JSF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在GAE上执行spring mvc + primeFaces时遇到了问题,我认为除了当我尝试通过发送post来修改我的bean的值时,所有工作都正常,值与以前保持一致。这里是代码:

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>
<参数值>生产< /参数值>
< / context-param>

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

< param-value> false< /参数值>

< / 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>
1< / load-on-startup>
< / servlet>



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


< servlet>
< servlet-name>主< / servlet-name>
< servlet-class> org.springframework.web.servlet.DispatcherServlet< / servlet-class>
<载入启动> 2< /载入启动>
< / servlet>

< servlet-mapping>
< servlet-name>主< / 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>
<角色名称> *< /角色名称>
< / auth-constraint>
< / security-constraint>




< servlet>
< servlet-name> SystemServiceServlet< / servlet-name>
< servlet-class> com.google.api.server.spi.SystemServiceServlet< / servlet-class>
< init-param>
< param-name>服务< / param-name>
< param-value />
< / init-param>
< / servlet>
< servlet-mapping>
< servlet-name> SystemServiceServlet< / servlet-name>
< url-pattern> / _ ah / spi / *< / url-pattern>
< / servlet-mapping>
< / web-app>

main-servlet.xml

 <?xml version =1.0encoding =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 //>



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

name =prefix
value =/ WEB-INF / jsp //>

name =suffix
value =。xhtml/>
< / bean>


< / beans>

faces-config.xml

 <?xml version =1.0encoding =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;


$ b @RequestMapping(value =/ home,method = RequestMethod.POST)
public ModelAndView homePost(){
ModelAndView mv =新的ModelAndView(索引);

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实现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 =homemethod =post>
< h:panelGrid style =margin-top:20px; columns =2cellpadding =10>

< p:outputPanel autoUpdate =true>

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


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

< / p:outputPanel>




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

< / form>


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


< / html>


解决方案

只需转动

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

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

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

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

< / form>

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

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

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

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

< / h:表格>

使用以下方法

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


I have a problem with implementing spring mvc + primeFaces on GAE, i think that all works fine except when i try to modify values of my bean by sending post, values remain the same as before. Here is code:

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>

main-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>

解决方案

Just turn

<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>

Into

<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>

with the following method

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

这篇关于GAE上的Spring mvc + JSF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆