2013-05-31 28 views
5

Tôi đã gặp phải tình huống này.Giá trị nào được gửi bởi thẻ checkbox struts khi hộp kiểm không được chọn

class MyForm extends IdSelectionForm { 
    private Boolean approveIt = true; 
    ..... 
} 

hình thức JSTL tôi bao gồm

<html:checkbox property="approveIt" styleId="style1" value="true"/> 

Khi tôi chọn hộp kiểm và gửi đi. Trong hành động struts tôi nhận được giá trị thực sự thiết lập cho lĩnh vực này. Và một lần nữa khi tôi bỏ chọn nó và gửi đi. Sau đó, tôi cũng có được giá trị thực sự. Tôi tự hỏi nếu nó là một cái gì đó với giá trị mặc định. Nó có bị ghi đè sai không khi tôi bỏ chọn.

Trả lời

5

Trước hết, <html:checkbox> là thẻ Struts không phải là thẻ JSTL. Thẻ này chỉ cần tạo hộp kiểm nhập HTML chuẩn của hộp kiểm loại. Và hộp kiểm HTML gửi giá trị của chúng dưới dạng giá trị tham số khi chúng được chọn và không gửi bất kỳ tham số nào khi chúng được bỏ chọn.

Vì vậy, kể từ khi giá trị mặc định của trường mẫu của bạn là đúng:

  • nếu hộp kiểm được chọn, nó sẽ được thiết lập là true bởi Struts
  • nếu bỏ chọn hộp kiểm, nó sẽ không được đặt thành bất kỳ thứ gì bởi Struts và do đó sẽ giữ giá trị mặc định của nó: true

Giá trị mặc định của thuộc tính approveIt phải sai. Bằng cách đó, nếu hộp kiểm được bỏ chọn, nó sẽ giữ giá trị mặc định của nó (false), điều đó là đúng. Và nếu hộp kiểm được chọn, nó sẽ được đặt thành true, cũng đúng.

2

Thuộc tính value chứa giá trị được thẻ sử dụng và không có trạng thái nào với trạng thái checkbox, nếu đó là checked hoặc không được chọn.

Khi gửi, chỉ các hộp kiểm đã chọn được chuyển. Sau đó, Struts bắt chúng và thiết lập tương ứng với các thuộc tính bean name.

Nếu bạn mỗi lần khởi tạo giá trị nội tuyến hoặc trong hàm tạo thì chỉ các hộp kiểm checked sẽ được cập nhật bằng cách đặt giá trị thuộc tính bean. Bạn không thể cập nhật trạng thái không được chọn.

Do đó, không đặt bất kỳ giá trị nào trước khi biểu mẫu được điền. Nếu giá trị không được đặt thì Struts sẽ coi giá trị đó là false và xóa checked khỏi thẻ. Điều này tương đương bằng cách đặt giá trị thành false một cách rõ ràng.

Các hành vi trái ngược với giá trị true nhưng hộp không có một trạng thái cho các giá trị khác như null hơn true hoặc false tương ứng với trạng thái của hộp kiểm checked hoặc không được kiểm soát (không checked thuộc tính).

2

Tôi đã gặp sự cố tương tự. Sự cố vẫn tồn tại ngay cả sau khi biến boolean được khởi tạo thành false.

Vấn đề là phạm vi của tôi là session.

Khi thay đổi phạm vi thành request mọi thứ hoạt động như mong đợi.