0

さて、selectManyCheckbox の結果を整数配列に入れようとしているため、ターゲットがコレクションまたは配列ではないと言われている理由がわかりません。ユーザーが複数の数値を選択して配列に格納し、後で表示できる 1 ~ 50 のチェックボックスにすぎませんが、「ターゲット モデル タイプはコレクションまたは配列ではありません」というエラー メッセージが表示され続けます。これは、整数配列ではなくオブジェクト配列に保存する必要があるものですか? この同じ問題を扱っている他のスレッドがあることは知っていますが、私が見た他のスレッドは、一般的に誰かが間違ったタイプのチェックボックスを使用しているか、誰かが配列またはコレクションに保存していませんでした. どんな助けでも本当にありがたいです。

<p>
        Pick Your Lotto Numbers
        <h:selectManyCheckbox value="#{lottoBean.numbersPicked}"
                 layout="lineDirection">
        <f:selectItems value="#{lottoBean.numberChoices}"/>
        </h:selectManyCheckbox>
  </p>
  <p>
        <h:commandButton value="Submit"
                         action="next.xhtml"/>
  </p>

そして myLottoBean クラス...

int[]choices = new int[50];
int[]picked;
int[]actual;
int test = 5;

/**
 * Creates a new instance of LottoBean
 */
@SuppressWarnings("empty-statement")
public LottoBean() {
    picked = new int[6];
    actual = new int[6];
}

public void setNumbersPicked(int[] chosen)
{
    for(int i =0; i < 6; i++)
    {
        picked[i] = chosen[i];
    }
}

@SuppressWarnings("empty-statement")
public String getNumbersPicked()
{
    return Arrays.toString(picked);
}

public int[] getNumberChoices()
{
    for (int i = 0; i < 50; i++) 
    {
        choices[i] = i + 1;
    }
    return choices;
}

public String getNumbersDrawn()
{
    Random num = new Random();
    for (int i = 0; i < 6; i++)
    {
        int nextNum = num.nextInt(50);
        int number  = nextNum + 1;
        actual[i] = number;
    }
    return Arrays.toString(actual);
}
}
4

2 に答える 2

1

あなたselectManyCheckoboxの価値は#{lottoBean.numbersPicked}です。numbersPickedこれは、Collectionまたはという名前のプロパティが必要であることを意味しますArray。配列の例:

private int[] numbersPicked;

public int[] getNumberPicked() {
  return numbersPicked;
}

public void setNumberPicked(int[] numbersPicked) {
  this.numbersPicked = numbersPicked;
}

バッキング Bean にこれを含める必要があります。問題は、ゲッター メソッドが を返すことStringです。

于 2013-03-13T08:10:41.180 に答える
0

最終的にLinkedHashMapを使用することになりました。これにより、整数以外のものを使用する同様のものが必要になった場合、アイテムを簡単にプラグインできます.

public class LottoBean {

private Integer[] numbers;
private int[] actual = new int[6];
private Random generator;

private static Map<Integer,Integer> numbersName;

static
{
    numbersName = new LinkedHashMap<Integer,Integer>();
    for (int i = 1; i < 51; i++)
    {
        numbersName.put(i,i);
    } 
}

/*
 * returns Integer array
 */
public Integer[] getNumbers() 
{
    return numbers;
}

/*
 * Sets array to numbers picked
 */
public void setNumbers(Integer[] numbers) 
{
    this.numbers = numbers;
}

/**
 * Returns map 
 * @return numbersName 
 */
public Map<Integer,Integer> getNumbersName() 
{
    return numbersName;
}

/**
 * Returns the numbers array
 * @return the numbers array in string form
 */
public String getNumbersNameArray()
{
    return Arrays.toString(numbers);
}

/**
 * Generates numbers drawn
 * @return actual the numbers drawn
 */
public String getActualNumbersArray()
{ 

    for (int i = 0; i < 6; i++)
    {
        generator = new Random();
        int number = 1 + generator.nextInt(50);
        actual[i] = number;
    }
    return Arrays.toString(actual);
}

/**
 * Compares numbers picked to numbers drawn
 * @return the number of matching numbers
 */
public int getSame()
{
    int same = 0;  
      for (int i = 0; i < numbers.length; i++) 
      {  
         for(int j = 0; j < actual.length; j++) 
         {  
            if (numbers[i] == actual[j]) 
            {  
               same++;
            }
         }
      }
      return same;
}

}

索引...

<head>
<title>Lotto Numbers</title>
</head>
<body>
<h:form> 
<p>
    Pick six numbers from the list:
</p>
<h:selectManyCheckbox id="chkbox1" value="#{lottoNumbers.numbers}"
required="true" requiredMessage="check exactly six numbers" 
layout="lineDirection" border="1" readonly="false">
<f:selectItems value="#{lottoNumbers.numbersName}"/>
</h:selectManyCheckbox>
<h:message for="chkbox1" style="color:red"/>
<br/><br/>
<h:commandButton value="submit" action="next" />
</h:form>
</body>
</html>

そして次...

<head>
<title>Lotto Numbers</title>
</head>
<body>
<h:form>
<p>
    <h:outputText value="You have selected : #{lottoNumbers.numbersNameArray}" />
</p>
    <h:outputText value="Actual numbers    : #{lottoNumbers.actualNumbersArray}" />
<p>
    <h:inputText value="Matching numbers   : #{lottoNumbers.same}" /> 
</p>
</h:form>
</body>
</html>
于 2013-03-13T18:12:39.950 に答える