2012-01-02 21 views
0

ActionForm次のgetterメソッドとsetterメソッドがある拡張私のStruts-config.xmlファイル、GetTareByBarcodeFormプロパティなしgetterメソッド - JSP例外

<action path="/getTareWeight" 
    type="com.astrazeneca.usbod.scale.actions.GetTareByBarcodeAction" 
    name ="getTareByBarcodeForm" 
    scope="request" 
    validate="true" 
    input="/jsp/getTareByBarcode.jsp"> 

    <forward name="success" path="/jsp/tareWeightResult.jsp" /> 
    </action> 

GetTareByBarcodeAction.javaファイルで

public String getBarcodeString() { 
    return (this.barcodeString); 
} 

public void setBarcodeString(String barcodeString) { 
    this.barcodeString = barcodeString; 
} 

public String getResult() { 
    return (this.result); 
} 

public void setResult(String result) { 
    this.result = result; 
} 

で、

public ActionForward execute(ActionMapping mapping, ActionForm form, 
     HttpServletRequest request, 
     HttpServletResponse response) 
     throws IOException, ServletException{ 
     String target = new String("success"); 
     double tareWeight=0; 
     String tw = new String(""); 
     GetTareByBarcodeForm gForm = (GetTareByBarcodeForm)form; 
     String errorString; 
     StringTokenizer t = new StringTokenizer(gForm.getBarcodeString(), 
     " \t\n\r\f:,;."); 
     List barcodeList = new ArrayList(); 
     List tareWeightList = new ArrayList(); 
     while (t.hasMoreTokens()) {    
     barcodeList.add(t.nextToken().trim());   
     } 
     int size = barcodeList.size(); 
     VesselProcessor vproc = VesselProcessor.getInstance(); 
     for(int i=0;i<size;i++) 
     { 
     tareWeight = vproc.checkTares((String) barcodeList.get(i)); 
     tw=Double.toString(tareWeight); 
     tareWeightList.add(barcodeList.get(i)); 
     tareWeightList.add(tw); 
     String temp = barcodeList.get(i).toString(); 
     gForm.setBarcodeString(temp); 
     gForm.setResult(tw); 
     } 

    request.setAttribute("TAREWEIGHT", tareWeightList); 
    return (mapping.findForward(target));  
} 

tareWeightResult.jspファイル、私はテーブル形式で属性TAREWEIGHTの値を印刷しています。

<logic:present name="TAREWEIGHT"> 
     <logic:iterate id="result" name="TAREWEIGHT"> 
      <tr> 
       <td> 
        <bean:write name="result" property="barcodeString"/> 
       </td> 
       <td> 
        <bean:write name="result" property="result"/> 
       </td> 
      </tr>   
     </logic:iterate> 
    </logic:present> 

weblogicサーバーにデプロイした後にこの機能を実行しようとしたとき、以下のエラーがログに記録されます。

javax.servlet.jsp.JspException: No getter method for property barcodeString of bean result 
at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:968) 
at org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:286) 
at jsp_servlet._jsp.__tareweightresult._jsp__tag2(__tareweightresult.java:237) 
at jsp_servlet._jsp.__tareweightresult._jspService(__tareweightresult.java:174) 
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34) 

このシナリオでどこが間違っているか教えていただけますか?

答えて

1

でBean名を持ついくつかの問題があるように私には見えます:後者はString S、SO bean:write試行が含まれていますプロパティを抽出するには、それはできません:Stringは、そのようなゲッターを持っていません。

ロジックの値を抽出し直し、適切なインスタンスに結果をラップする必要があります。

だからあなたのコードはより以下のようになります。

for (int i = 0; i < size; i++) { 
     tareWeight = vproc.checkTares((String) barcodeList.get(i)); 
     tw = Double.toString(tareWeight); 
     String temp = barcodeList.get(i).toString(); 

     GetTareByBarcodeForm f = new GetTareByBarcodeForm(); 
     f.setBarcodeString(temp); 
     f.setResult(tw); 
     tareWeightList.add(f); 
    } 

結果リスト、あなたがTAREWEIGHTとして渡す1は、適切なオブジェクトが含まれますように。

まだ、それほど良いことではありません。現在、GetTareByBarcodeFormは、実際のフォームと検索結果エントリの2つの役割を果たします。だから私は非常にTareTableEntry、新しいクラスを導入をお勧めしますし、それだけでテーブルの詳細が含まれます:

for (int i = 0; i < size; i++) { 
     tareWeight = vproc.checkTares((String) barcodeList.get(i)); 

     TareTableEntry entry = new TareTableEntry(); 
     entry.setBarcodeString(barcodeList.get(i)); 
     entry.setResult(tareWeight); 
     tareWeightList.add(entry); 
    } 

より多くのコードだが、それは長期的に報わこと。

+0

返信ありがとうございます。私に適用されるロジックの概要を教えてください。要件は、ユーザーがバーコードのセットを入力して[送信]ボタンをクリックするようなものです。各バーコードはDB内の重みに関連付けられています。私はこれらのバーコードをJSPページの表形式で重み付けして表示したいと考えています。 – LGAP

+0

これはあまりにも多くの単一の質問の要件:)あなたにアイデアを与えるために答えを編集し、秒間保持します。 – alf

+0

BTW ..混乱して申し訳ありません;) – LGAP

0

"result"のIDはTAREWEIGHTで表されます。このオブジェクトはbarCodeStringプロパティを持っていますか?それは私がtareWeightListにはGetTareByBarcodeFormインスタンスが存在しない、あなたのコードから見ることができる限り

<bean:write>.