Tôi biết những gì prependId=false
thực hiện. Nó đặt cờ để id của biểu mẫu không thêm vào id của mẫu con, nhưng tại sao? bất kỳ lý do cụ thể tại sao bạn làm hoặc không muốn thêm id?JSF: Tại sao prependId = false trong biểu mẫu?
Trả lời
Theo kinh nghiệm của tôi, tôi không bao giờ sử dụng thuộc tính này. Tuy nhiên, trong một số trường hợp, nó có thể hữu ích.
Khi bạn sử dụng Facelets, bạn có thể tạo mẫu hoặc bao gồm các trang bên trong một trang khác. Vì vậy, bạn có thể tưởng tượng rằng một trang có thể được bao gồm trong một số trang khác nhau. Hãy ví dụ nơi trang mẹ chứa một form
, với id khác nhau:
Trang 1:
<h:form id="form1">
<ui:include src="pages/my-page.xhtml"/>
...
</h:form>
Trang 2:
<h:form id="form2">
<ui:include src="pages/my-page.xhtml"/>
...
</h:form>
Giờ đây, trong my-page.xhtml
, bạn có một số <h:inputText id="foo"/>
. Trong trường hợp đầu tiên, ID thực của đầu vào sẽ là form1:foo
, trong trường hợp thứ hai, ID này sẽ là form2:foo
. Điều này có thể tạo ra các tình huống phức tạp nếu bạn cần truy cập trực tiếp vào thành phần này trong Javascript hoặc trong Java (sử dụng phương thức findComponent("...")
).
Nếu bạn sử dụng prependId="false"
(hoặc trên một số thành phần forceId="true"
), ID sản sẽ được đơn giản foo
, và sau đó mã của bạn sẽ đơn giản hơn vì bạn sẽ không phải quan tâm đến các container của lĩnh vực đầu vào.
Tuy nhiên, bạn sẽ phải sử dụng thuộc tính này một cách cẩn thận, như bạn có thể nhận được một lỗi ID trùng lặp nếu bạn sử dụng prepend
này thuộc tính quá thường xuyên ...
Đồng ý. Tuy nhiên, truy cập JS có thể được đơn giản hóa nếu bạn đang sử dụng từ khóa 'this' này một cách thông minh :) – BalusC
Với prependId =" true ", id thành phần được đặt trước bằng formName. Điều này hữu ích nếu bạn có nhiều thành phần có cùng id trong hai biểu mẫu khác nhau trong cùng một tệp .xhtml. – bilelovitch
Một kịch bản mà chúng ta phải thiết lập cờ này là trong trường hợp Kiểm soát tự động hoàn toàn thư viện các thư viện.
Tôi phải đặt cờ này thành sai khi tôi đang cố gắng kiểm soát Tự động hoàn thành thư viện thủ đô. Tôi đã không thể nhận được tự động hoàn thành làm việc nhưng sau khi thiết lập cờ này nó làm việc tốt. Bạn có thể thấy liên kết này cho câu hỏi của tôi về vấn đề này
WARN [Parameters] Parameters: Invalid chunk ignored. warning coming in primefaces application
Tôi thích thêm prependId thỉnh thoảng để làm cho các yếu tố phong cách qua lớp ID của họ dễ dàng hơn. Ví dụ: một biểu mẫu:
<h:form id="myform" ... >
<h:inputText id="mytext" ... />
</h:form>
Sẽ cấp cho bạn ID là myform:mytext
. Vì dấu hai chấm được đặt trong CSS, bạn phải thoát khỏi CSS để đọc một cái gì đó như #myform\:mytext { ... }
mà tôi không muốn làm. Với prependId="false"
Tôi chỉ sử dụng #mytext { ... }
, đơn giản hơn rất nhiều & đẹp hơn để đọc. Nó cũng đẹp hơn với các bộ tiền xử lý CSS như LESS hoặc Sass.
Một giải pháp thay thế sẽ là sử dụng javax.faces.SEPARATOR_CHAR - điều này cho phép bạn sử dụng một ký tự dấu tách khác thay vì ":". – sleske
Để làm rõ: @Lee Theobald rõ ràng có nghĩa là "đại tràng" khi nói "Là dấu chấm phẩy ...". –
Điều đó tôi đã làm. Đã sửa câu trả lời một cách thích hợp. –
Trường hợp prependId = false có ích trong biểu mẫu đăng nhập, nếu bạn đang sử dụng Spring Security, vì các id của các đầu vào phải chính xác là "j_username" và "j_password". Vì vậy, bạn không nên đặt id biểu mẫu trước chúng, và sử dụng prependId = false là một lựa chọn tốt để đạt được điều này.
Ngoài việc làm cho bộ chọn CSS dễ dàng hơn, việc sử dụng prependId=false
giúp việc sử dụng JavaScript và jQuery dễ dàng hơn để truy cập các phần tử cụ thể.
Nếu không, mà không sử dụng RichFaces, để có được một elmement bởi id sử dụng jQuery, bạn sẽ phải sử dụng một dãy thoát xấu xí như:
jQuery("form-id\\:element-id")
Sử dụng các lớp CSS giả. JSF không bao giờ sửa đổi tên lớp, vì vậy bạn có thể chỉ cần truy cập thuộc tính bằng cách sử dụng '$ (. MyClass)'. –
- 1. Tại sao ProgressEvent.lengthComputable false?
- 2. Tại sao biểu mẫu HTML của tôi vẫn gửi khi tôi trả về false từ onsubmit?
- 3. isValid trong biểu mẫu khung công tác zend FALSE
- 4. Tại sao asp.net quấn trang trong một biểu mẫu?
- 5. Tại sao biểu mẫu này đúng trong C?
- 6. Request.Browser.IsMobileDevice = false cho Android, tại sao?
- 7. Tại sao Integer.respond_to? (: Even?) Trả về false?
- 8. Thành phần cập nhật JSF 2 Bên ngoài biểu mẫu và bên ngoài Facelet
- 9. Cách tạo các trường biểu mẫu JSF động
- 10. JSF: Thực hiện các giá trị của nhiều biểu mẫu
- 11. trả về false khi addEventListener gửi vẫn gửi biểu mẫu?
- 12. Tại sao biểu mẫu VB6.0 hiển thị dưới dạng biểu mẫu C#?
- 13. Tại sao Boolean (sai) mới bằng false trong JavaScript?
- 14. Tại sao tải biểu mẫu không thể bắt ngoại lệ?
- 15. Tại sao bạn nên xác thực biểu mẫu bằng javascript?
- 16. Tại sao cụm từ này không hoạt động? JSF
- 17. C# Tại sao form.Close() không đóng biểu mẫu?
- 18. Mẫu JSF không hiển thị
- 19. JSF facelets mẫu bao bì
- 20. tại sao sql = FALSE luôn trả về true
- 21. Tại sao double.TryParse ("0.0000", out doubleValue) trả về false?
- 22. Tại sao event.bubbles là false cho "focusin" và "focusout"?
- 23. Tại sao is_a? trả về false cho lớp Hash?
- 24. Tại sao QFile :: canReadLine() luôn trả về false?
- 25. Tại sao System.IO.File.Exists (đường dẫn chuỗi) trả về false?
- 26. Tại sao True/False được viết hoa bằng Python?
- 27. Tại sao AutoDetectChangesEnabled được đặt thành false theo mặc định?
- 28. Tại sao # (băm) trong mẫu Dapper
- 29. Tại sao mẫu Borg tốt hơn mẫu Singleton trong Python
- 30. Tại sao biểu mẫu của tôi không được đăng lại sau khi xác thực?
liên quan: http://stackoverflow.com/questions/7415230/jsf-namingcontainer-và-uiform-với-prependid/tl; dr: chỉ không sử dụng nó, bao giờ hết. – BalusC