3

私は非常に痛い問題を抱えています。ウェブ上で解決策が見つかりませんでした。

私はJSFでSpring 3.0を使用しており、PrimeFaces Spring Securityが構成されており、Spring Web Flowも構成されています(ただし、この例では使用していません)。

私が実現したい動作は次のとおりです。ユーザーは p:selectOneMenu から値を選択し、変更時に送信します。次に、値が Bean に送信され、そこでも変更されます。効果: p:selectOneMenu を使用して、userBean 内の値を変更しました

すべてを実装した後、次のようなエラーが発生しました。

    HTTP Status 405 - Request method 'POST' not supported

Select One Menu は次のように書かれています。

<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);
}

    }

私がウェブで見つけた1つの例では、value="#{userBean.userType}" がうまくいくので valueChangeListener は必要ないと言いましたが、ここでは問題ではありません。

値はまったく変化しません。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

私は何を逃したのですか?任意の注釈または sth ? 何が悪いのかさっぱりわかりません

4

1 に答える 1

0
  1. Spring Webflow を使用している場合、@ManagedBean アノテーションは推奨されません。そこから Spring Bean にアクセスすることはできません。代わりに @Component('userBean') および @Scope(value=WebApplicationContext.SCOPE_SESSION) を使用してください。Faces が Spring Bean を解決できるようにするには、Spring EL リゾルバーを構成に追加する必要があります。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 コンポーネントを参照することはお勧めできません。ID は変更される可能性があるためです。

  3. 値変更リスナーが必要ない場合は、変更イベントで selectOneMenu がバッキング Bean を更新するように ajax ハンドラーを追加するだけです。

<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>
于 2013-01-17T15:27:03.650 に答える