5

JSPページと1つのボタンにさまざまなタイプの複数のフィールドがあります。これらのフィールドは、私が作成したメタデータテーブルから取得した情報に基づいて生成されます。

存在するフィールドの数とタイプがわからないため、動的なフィールドを指定idしています。JSPでStruts2タグを使用しています。

問題は<s:select>タグにあります。属性内にscripletを指定idすると、次のエラーが表示されます。

org.apache.jasper.JasperException:/success.jsp(83,12)引用記号が必要です

<s:if test="%{#masterColDO.controlType=='dropdown'}">
    <s:select styleClass="login-textbox" 
                   style="width:130px"  
                    list="#masterColDO.validation"     
                    name="chngdColumnValues" 
                      id=<%="columnId" + count%> />
</s:if> 
<s:else>
    <input type=<s:property value="#masterColDO.controlType" /> 
          class="login-textbox " 
           name="chngdColumnValues" 
             id=<%="columnId" + count%> />
</s:else>

Javascriptは次のとおりです。

var addUpdateBtnId = document.getElementById('addUpdateBtnId');
addUpdateBtnId.value='Update';
addUpdateBtnId.onclick = function() {
    onClickUpdateBtn(rowIndex);
};
var selectedUpdateRow = xmlhttp.responseText.split(",");
for(var i = 0; i < selectedUpdateRow.length; i++){
    var columnElementId = "columnId"+i;
    document.getElementById(columnElementId).value = selectedUpdateRow[i];
}
document.getElementById("columnId"+(primaryKeyPos-1)).readOnly = true;
4

3 に答える 3

8

Scriptletsは古いやり方です。 'sでコードを書くことは絶対に避けてくださいJavaJSP;
Struts2は、タグのみを使用して同じ目標を達成するのに役立ちますOGNL

HTMLタグ内に挿入しているため、パーツは機能しています。これは許可されています<input />scriptlet

Struts2タグの内側に挿入<s:select />しているため、パーツが機能していません。これは許可されていません。scriptlet

これを機能させるには、#attr構文inを使用して、で宣言され、プッシュされOGNLた変数にアクセスする必要があります。たとえば、次のようになります(完全にテストされていません)。JavaScriptletsPage Context

<%
    for (int counter=0;counter<myList.size();counter++) {
       // pushing it into the pageContext
       pageContext.setAttribute("counter",counter);
%>
        <s:select cssClass="login-textbox" 
                  cssStyle="width:130px" 
                      list="#masterColDO.validation" 
                      name="chngdColumnValues"      
                        id="%{'columnId' + #attr['counter']}" />
<%    
    }
%>

ただし、技術的に可能であっても、お勧めしません。そのためには、純粋なStruts2の方法を使用する必要があります。これは、次のようになります。

<s:iterator value="myList" status="ctr">
    <s:select cssClass="login-textbox" 
              cssStyle="width:130px" 
                  list="#masterColDO.validation" 
                  name="chngdColumnValues" 
                    id="%{'columnId' + #ctr.index}" />
</s:iterator>

styleClassPS:Strutsタグには属性がありません。あなたが使用することができますcssClassおよび/またはcssStyle;
また、controlTypeが文字列の場合は、:の代わりに使用する必要があり.equalsます。==<s:if test="%{#masterColDO.controlType.equals('dropdown')}">

于 2013-02-01T10:56:16.213 に答える
3

むしろ、次のようなStruts2式の構文を使用する必要があります。

id="%{'columnId' + count}"
于 2013-02-01T06:44:03.940 に答える
0

Struts2の使用値スタック。したがって、このカウントはognlの方法でフェッチする必要があります。次のように試してください。

id="%{'columnId'+count}"
于 2013-02-01T06:50:47.270 に答える