我遇到了非常痛苦的问题。无法在网络上找到解决方案。
我正在使用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
我错过了什么?任何注释或某事? 我不知道什么是错的
答案 0 :(得分:0)
如果您使用的是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
您无需提交表单即可更新支持Bean值。删除onchange =“formUserChange.submit();”。在JavaScript中通过ID引用JSF组件不是一个好习惯,因为这些组件可能会发生变化。
如果您不需要值更改侦听器,则可以添加ajax处理程序以在更改事件上使selectOneMenu更新支持bean:
<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>