2013-02-01 41 views
5

Tôi có nhiều trường có nhiều loại khác nhau trong trang JSP và một nút. Các trường này được tạo dựa trên thông tin nhận được từ bảng siêu dữ liệu mà tôi đã tạo.Struts 2 s: id động thẻ chọn

Vì tôi không biết số lượng và loại trường hiện diện, Tôi đang cung cấp số id động cho chúng. Tôi đang sử dụng các thẻ Struts 2 trong JSP của tôi.

Vấn đề là với thẻ <s:select>: khi tôi cung cấp cho scriplet trong thuộc tính id, nó sẽ hiển thị các lỗi sau:

org.apache.jasper.JasperException: /success.jsp(83,12) biểu tượng quote dự kiến ​​

<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 là như sau:

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; 

Trả lời

8

Scriptlet s là cách làm cũ, you should avoid writing Java code in JSP's at all;
Struts2 giúp bạn đạt được các mục tiêu giống nhau bằng cách sử dụng thẻ của mình và chỉ OGNL.

Phần <input /> đang hoạt động vì bạn đang tiêm scriptlet bên trong thẻ HTML, được cho phép.

Phần <s:select /> không hoạt động vì bạn đang tiêm scriptlet bên trong thẻ Struts2, điều này không được phép.

Để làm cho nó làm việc, bạn nên sử dụng #attr cú pháp trong OGNL để truy cập Java biến khai báo trong Scriptlets và đẩy bởi bạn trong Page Context, như thế này (hoàn toàn chưa được kiểm tra):

<% 
    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']}" /> 
<%  
    } 
%> 

Tuy nhiên, ngay cả khi nó là kỹ thuật có thể, nó là nản lòng. Bạn nên sử dụng struts2 cách tinh khiết cho rằng, đó sẽ là như sau:

<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> 

Tái bút: Struts thẻ không có bất kỳ styleClass thuộc tính; bạn có thể sử dụng cssClass và/hoặc cssStyle;
Và nếu controlType là một Chuỗi, bạn nên sử dụng .equals thay vì ==: <s:if test="%{#masterColDO.controlType.equals('dropdown')}">.

+1

Hey nhờ người bạn đời , nó hoạt động tốt. Tuyệt vời –

3

Bạn khá nên sử dụng cú pháp biểu hiện struts2 thích này:

id="%{'columnId' + count}" 
+0

Trong số mã của tôi là biến JAVA. Tôi đang sử dụng nó như một bộ đếm. tôi đã khởi tạo nó như <% int count = 0;%>.Tôi đã thử với các mảnh trên mã, nó không làm việc –

+0

này class = "login-textbox" name = "chngdColumnValues" id = <% =" columnId" + đếm%> /> làm việc –

+1

scriplets Trộn với các thẻ JSP là một thực tế xấu, bạn nên cố gắng sử dụng hoặc hoặc xác định tính là hành động của tài sản http: // thanh chống .apache.org/2.x/docs/iterator.html –

0

valuestacks sử dụng struts2, Vì vậy, số lượng này cần được lấy theo cách OGNL, thử một cái gì đó như thế này:

id="%{'columnId'+count}" 
+0

Trong số mã của tôi là một biến JAVA. Tôi đang sử dụng nó như một bộ đếm. Tôi đã khởi tạo nó như <% int count = 0;%>. Tôi đã thử với đoạn mã trên, nó không hoạt động. Đây class = "login-textbox" name = "chngdColumnValues" id = <% = "columnId" + đếm%> /> làm việc –

Các vấn đề liên quan