0

単一のボタンで同じ入力ボックスの複数の入力を処理しようとしています。16 個の入力ボックスがあり、それぞれに独自の id# (YfProduct) があり、これをハッシュマップのキーとして使用しています。入力値には、Weight があります。ユーザーは、必要な数の入力ボックスに必要な倍加重を入力し、以下のメソッドをアクティブにするボタン (a4j:commandButton) をクリックします。

private HashMap<Integer, Double> storeWeight = new HashMap<Integer, Double>(); 

public void storeWeight(Yieldfl yieldfl){
    for (YieldItem row : yielditem) {
    storeWeight.put(row.getYfProduct(), row.getWeight());
    System.out.print(storeWeigt)}
}

現在、このコードは正しいキーで適切な値を設定し、それらの値を入力された新しい入力と別のボタンクリックに置き換えます。しかし、私がやろうとしているのは、ビーンに以前の値を保存させ、同じキーを持つ以前のエントリで入力された次の値を合計することです。したがって、ユーザーの入力の最後に、HashMap には 16 個のキーが含まれ、各キーの個々の値の合計が加算されます。深刻なハードコーディングなしでは、これを行う方法を思いつくことができませんでした。大変助かりました。

4

1 に答える 1

0

したがって、これは実際には簡単な修正であることが判明しました。誰かが同様の問題に遭遇した場合に備えて、ここに解決策を掲載します. HashMap を扱うのは初めてなので、同僚に助けてもらいました。キーを呼び出すには値が必要でした。

storeWeight.put(row.getYfProduct(), storeWeight.get(row.getYfProduct() + (row.getWeight()));

そしてヌルポインタを避けるために:

public void storeWeight(Yieldfl yieldfl){
    for (YieldItem row : yielditem) {
        Double oldValue = storeWeight.get(row.getYfProduct());
        if (oldValue == null)
            oldValue = 0.0;
    storeWeight.put(row.getYfProduct(), oldValue + (row.getWeight()));
    row.setWeight(0.0);
    System.out.print(storeWeight);}
}
于 2012-11-27T22:11:39.167 に答える