0

電卓を表す Bean クラスがあります。このクラスは、加算、減算、乗算、および除算の 4 つのメソッドを公開します。

フロント エンドでは、JSP ページを作成しています。このページには 2 つのテキスト入力ボックス (x 用と y 用) があります。ユーザーが操作を選択するプルダウン メニューと、選択した操作を実行する 1 つの[計算] コマンド ボタンがあります。

<h:form>
    <h:inputText value="#{calcBean.x}"></h:inputText>
    <h:inputText value="#{calcBean.y}"></h:inputText>
    <h:selectOneMenu>
        <f:selectItem itemValue="Add"></f:selectItem>
        <f:selectItem itemValue="Subtract"></f:selectItem>
        <f:selectItem itemValue="Multiply"></f:selectItem>
        <f:selectItem itemValue="Divide"></f:selectItem>
    </h:selectOneMenu>
    <h:commandButton value="Calculate" action="@SEE COMMENT">
    <%-- TODO the action of this command button needs to change depending on --%>
    <%-- the user selection. For example: If the user selects "Add" the action --%>
    <%-- needs to be #{calcBean.add} --%>
    </h:commandButton>
</h:form>

私が直面している問題は、ユーザーの選択に応じてコマンド ボタンのアクションを変更する方法がわからないことです。

4 つの異なるコマンド ボタンを使用してこれを行うこともできますが、それは洗練された解決策ではありません。

<h:form>
    <h:inputText value="#{calcBean.x}"></h:inputText>
    <h:inputText value="#{calcBean.y}"></h:inputText>
    <br/>
    <h:commandButton value="Add" action="#{calcBean.add}"></h:commandButton>
    <h:commandButton value="Subtract" action="#{calcBean.subtract}"></h:commandButton>
    <h:commandButton value="Multiply" action="#{calcBean.multiply}"></h:commandButton>
    <h:commandButton value="Divide" action="#{calcBean.divide}"></h:commandButton>
</h:form>
4

2 に答える 2

1

これを行うには、ユーザーの選択をバッキング Bean のプロパティにバインドし、選択した値をアクション メソッドの条件として使用して適切な計算を行います。

<h:selectOneMenu value=#{calcBean.calculationType}>
    <f:selectItem itemValue="Add"></f:selectItem>
    <f:selectItem itemValue="Subtract"></f:selectItem>
    <f:selectItem itemValue="Multiply"></f:selectItem>
    <f:selectItem itemValue="Divide"></f:selectItem>
</h:selectOneMenu>

<h:commandButton value="Add" action="#{calcBean.doSelectedCalculation}"></h:commandButton>

単一の一意のアクション メソッドでは、選択した計算タイプに応じて、指定された x 値と y 値に対して操作を実行できます。

public void doSelectedCalculation()
{
     if(calculationType.equals("Add"))
     {
          result = x + y;
     }
     else if(calculationType.equals("Subtract"))
     { 
          result = x - y;
     }
     ...

}
于 2013-01-21T22:27:00.320 に答える
1

JSF風の方法は次のようになります。

  1. <h:selectOneMenu>マネージド Bean のプロパティにバインドしますint selectedOption

  2. ユーザーに表示されるオプション ( <f:selectItem>) の値を設定します。1、2、3、4の可能性があります(基本的な例です)

  3. calculateマネージド Bean から単一のメソッドを公開します。このメソッドは<h:commandButton>アクション属性になります。このメソッドは、selectedOption属性を使用して、使用する操作を認識します。

この情報を使用すると、結果は次のようになります。

JSF コード

<h:form>
    <h:inputText value="#{calcBean.x}" />
    <h:inputText value="#{calcBean.y}" />
    <h:selectOneMenu value="#{calcBean.selectedOption}">
        <f:selectItem itemLabel="Add" itemValue="1" />
        <f:selectItem itemLabel="Subtract" itemValue="2" />
        <f:selectItem itemLabel="Multiply" itemValue="3" />
        <f:selectItem itemLabel="Divide" itemValue="4" />
    </h:selectOneMenu>
    <h:commandButton value="Calculate" action="#{calcBean.calculate}" />
</h:form>
Result: <h:outputText value="#{calcBean.result}" />

CalcBean コード

public class CalcBean {

    private int x;
    private int y;
    private int selectedOption;
    private double result;
    //constructor...
    //getters and setters...

    public String calculate() {
        result = 0;
        switch(selectedOption) {
            case 1:
                result = x + y;
                break;
            //write the other cases...
        }
        return null;
    }
}

上記のコードは JSF 1.2 に対応しています。JSF 2.x を使用している場合は、JSF wikiで説明されているように、JSP の使用をやめて Facelets に移行する必要があります。私見では、JSF 1.x の代わりに JSF 2 を学ぶほうがよいでしょう。

于 2013-01-21T22:33:45.283 に答える