Spring PrimeFaces selectOneMenu提交发送给我405 - 请求方法'POST'不支持

时间:2012-10-25 16:30:29

标签: spring primefaces spring-security spring-webflow

我遇到了非常痛苦的问题。无法在网络上找到解决方案。

我正在使用Spring 3.0和JSF以及PrimeFaces Spring Security配置,也有Spring Web Flow的配置(但我在这个例子中没有使用它。)

这是我想要实现的行为: 用户从p:selectOneMenu中选择一个值,并在更改时提交。然后为Bean发送值,并在那里进行更改。 效果:使用p:selectOneMenu我在userBean中更改了值

完成所有操作后,我收到一条错误消息:

    HTTP Status 405 - Request method 'POST' not supported

选择一个菜单就是这样写的:

<f:view>
<h:form id="formUserChange"  >
<p:panelGrid columns="2">
<p:selectOneMenu id="chooseUserType" onchange="formUserChange.submit();" 
value="#{userBean.userType}" valueChangeListener="#{userBean.processValueChange}" 
style="padding: 0px 5px; font-size: 13px; width: 200px;" >
      <f:selectItem itemLabel="Option 1" itemValue="KO" />
      <f:selectItem itemLabel="Option 2" itemValue="KJ" />
</p:selectOneMenu>
</p:panelGrid>
</h:form>
</f:view>

Bean放置如下:

   @ManagedBean(name = "userBean")
   @SessionScoped
   public class UserBean implements Serializable, ValueChangeListener {

private static final long serialVersionUID = 1L;

private String userName = "Michal";
private String userType = "WO";

public UserBean() {
}

public String getUserName() {
    System.out.println("I got now " + userType);
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getUserType() {
    return userType;
}

public void setUserType(String userType) {
    this.userType = userType;
    System.out.println("I set user as " + userType);
}

@Override
public void processValueChange(ValueChangeEvent arg0) throws AbortProcessingException {
    System.out.println("I have got " + userType);
}

    }

在网上发现的一个例子中,家伙说不需要valueChangeListener,因为value =“#{userBean.userType}”会解决问题,但这不是问题所在,我试过两个都没有效果。

价值根本没有变化。我知道bean在控制台上运行但在控制台上出错:

    18:09:26,565 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) I got now WO

    18:09:28,537 WARN  [org.springframework.web.servlet.PageNotFound] (http-localhost-127.0.0.1-8080-4) Request method 'POST' not supported

我也得到了页面(如开头所述):

    HTTP Status 405 - Request method 'POST' not supported

我错过了什么?任何注释或某事? 我不知道什么是错的

1 个答案:

答案 0 :(得分:0)

  1. 如果您使用的是Spring Webflow,则不建议使用@ManagedBean注释 - 您将无法从中访问Spring bean。请改用@Component('userBean')和@Scope(value = WebApplicationContext.SCOPE_SESSION)。您需要将Spring EL解析器添加到Faces的配置中以便能够解析您的Spring bean,请参阅http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/web/jsf/el/SpringBeanFacesELResolver.html

  2. 您无需提交表单即可更新支持Bean值。删除onchange =“formUserChange.submit();”。在JavaScript中通过ID引用JSF组件不是一个好习惯,因为这些组件可能会发生变化。

  3. 如果您不需要值更改侦听器,则可以添加ajax处理程序以在更改事件上使selectOneMenu更新支持bean:

  4. <p:selectOneMenu id="chooseUserType" value="#{userBean.userType}" style="padding: 0px 5px; font-size: 13px; width: 200px;" >
          <f:selectItem itemLabel="Option 1" itemValue="KO" />
          <f:selectItem itemLabel="Option 2" itemValue="KJ" />
          <p:ajax event="change"/>
    </p:selectOneMenu>