1

これは、ピザを構成しているユーザーに対して生成される JSP ファイルで、別のフローのサブフローです。送信ボタンを機能させるために少なくとも 1 つのチェックボックスをオンにする必要がある理由がわかりません。つまり、チェックボックスが 0 個チェックされている場合、送信ボタンを押すと同じサイトに戻ります。十分な情報が得られたことを願っています。さらに追加する必要がある場合は、それを書いてください。

これはどこでコード化されていますか? JSPまたはフローファイルのどこか?

必要なクラスで更新されました。

プロジェクトのgithubリポジトリを作成しました。

createPizza.jspx

<div xmlns:form="http://www.springframework.org/tags/form"
     xmlns:jsp="http://java.sun.com/JSP/Page">

  <jsp:output omit-xml-declaration="yes"/>  
  <jsp:directive.page contentType="text/html;charset=UTF-8" />  

    <h2>Create Pizza</h2>
    <form:form commandName="pizza">
      <input type="hidden" name="_flowExecutionKey" 
          value="${flowExecutionKey}"/>
    
      <b>Size: </b><br/>

  <form:radiobutton path="size" 
                    label="Small (12-inch)" value="SMALL"/><br/>
  <form:radiobutton path="size" 
                    label="Medium (14-inch)" value="MEDIUM"/><br/>
  <form:radiobutton path="size"
                    label="Large (16-inch)" value="LARGE"/><br/>
  <form:radiobutton path="size" 
                    label="Ginormous (20-inch)" value="GINORMOUS"/>
      <br/>
      <br/>
      
      <b>Toppings: </b><br/>
      <form:checkboxes path="toppings" items="${toppingsList}" 
                       delimiter="&lt;br/&gt;"/><br/><br/>

          
      <input type="submit" class="button" name="_eventId_addPizza" value="Continue"/>
      
      <input type="submit" class="button" name="_eventId_cancel" value="Cancel"/>          
    </form:form>
</div>

注文フロー.xml

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/webflow 
  http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

  <input name="order" required="true" />
  
  <view-state id="showOrder">
    <transition on="createPizza" to="createPizza" />
    <transition on="checkout" to="orderCreated" />
    <transition on="cancel" to="cancel" />
  </view-state>
  

  <!-- Corresponding state -->
  <view-state id="createPizza" model="flowScope.pizza">
  
    <on-entry>
      <set name="flowScope.pizza" 
          value="new com.springinaction.pizza.domain.Pizza()" />

      <evaluate result="viewScope.toppingsList"  expression=
                   "T(com.springinaction.pizza.domain.Topping).asList()" />
    </on-entry>
    
    <transition on="addPizza" to="showOrder">
      <evaluate expression="order.addPizza(flowScope.pizza)" />
    </transition>
    
    <transition on="cancel" to="showOrder" />
  </view-state>
  
  <end-state id="cancel" />
  <end-state id="orderCreated" />
</flow>

ピザジャバ

package com.springinaction.pizza.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

@SuppressWarnings("serial")
public class Pizza implements Serializable {
  private PizzaSize size;
  private List<Topping> toppings;
  
  public Pizza() {
    toppings = new ArrayList<Topping>();
    size = PizzaSize.LARGE;
  }

  public PizzaSize getSize() {
    return size;
  }

  public void setSize(PizzaSize size) {
    this.size = size;
  }
  
  public void setSize(String sizeString) {
    this.size = PizzaSize.valueOf(sizeString);
  }

  public List<Topping> getToppings() {
    return toppings;
  }

  public void setToppings(List<Topping> toppings) {
    this.toppings = toppings;
  }
  
  public void setToppings(String[] toppingStrings) {
    for (int i = 0; i < toppingStrings.length; i++) {
      toppings.add(Topping.valueOf(toppingStrings[i]));
    }
  }
}
4

1 に答える 1

0

どうやらshazinが問題を強調したように、問題はsetToppingsPizzaクラスのオーバーロードされたメソッドにあります。文字列の配列を引数としてコメントした後、アプリケーションは正常に動作します。おそらく、それをそのように処理し、別のコンテナーで変更される可能性がある EL に関連している可能性があります (私は tomcat を使用しましたが、専用サーバーは Jetty だと思います)。

于 2013-09-18T14:53:54.017 に答える