我有一个非常痛苦的问题。在网上找不到解决方案。
我正在使用带有 JSF 的 Spring 3.0,并且配置了 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
我错过了什么?任何注释或某事?我不知道出了什么问题