-3

私が基本的にやりたいことは、ユーザーがフォームを送信するときに、セッターではないメソッドを呼び出すことです。

これが私が試したことです:

<h:form>
    <p>
        Your guess: <h:inputText value="#{quizBean.someMethod()}"/>
    </p>
    <p>
        <h:commandButton value="Submit answer"/>
    </p>
</h:form>

#{quizBean.someMethod}でも動作しません。

someMethodというフィールドを作成し、そのゲッターとセッターを生成すると、問題なく動作します。

とにかくこれを行うことはありますか?

私のweb.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

これを Tomcat 7.0 で実行し、jsf-api:2.1.19およびjsf-impl:2.1.19 jar を使用しています。

これは私が得ている例外です:

javax.servlet.ServletException: /index.xhtml @23,71 value="#{quizBean.someMethod()}": Property 'someMethod' not found on type com.tugay.problems.QuizBean
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
4

2 に答える 2

1

フォーム送信時にメソッドを呼び出したいですか? これはまさにそのh:commandButtonために作られています。コマンド ボタンに属性を追加actionし、次のようにアクション メソッドを指定するだけです。

<h:inputText value="#{quizBean.answer}"/>
<h:commandButton value="Submit answer" action="#{quizBean.submitAnswer}"/>

Bean のメソッドは次のようになります。

public String submitAnswer() {
  // Do something with property answer
  return null;
}

入力コンポーネントの値が格納された後にアクション メソッドが呼び出されるため、問題なくアクセスできます。戻り値は、JSF によるナビゲーションに使用されます。ビュー ID またはナビゲーション結果を含めることができます。戻り値が null の場合、JSF は同じページにとどまります。

于 2013-04-15T06:35:15.750 に答える
1

いいえ。

value属性は、(そのメソッドを使用して) 式に評価される必要がありpropertyますget。さらに、コントロールが読み取り専用でない場合は、setメソッドも提供する必要があります。

他の属性 ( のaction属性などh:commandButton) は、Bean 内のメソッドに評価される式を受け入れますが、このメソッドには評価しません。

唯一の回避策は、すでに行ったことで、getimplementを作成することsomeMethodです。JSFページをレンダリングするときにメソッドが呼び出されるかどうかわからないことに注意してください。

于 2013-04-14T21:32:30.160 に答える