Về cơ bản, nó đặt bản đồ biến mới trong ngữ cảnh EL. Xem thêm the source code of ParamHandler
:
94 public void apply(FaceletContext ctx, UIComponent parent)
95 throws IOException {
96 String nameStr = this.name.getValue(ctx);
97 ValueExpression valueVE = this.value.getValueExpression(ctx,
98 Object.class);
99 ctx.getVariableMapper().setVariable(nameStr, valueVE);
100 }
Dòng ghi chú 99 (như trong Mojarra 2.1.0). Điều này truy xuất VariableMapper
from the EL context và sau đó sets a variable mapping on it with a ValueExpression
as value.
Điều này về cơ bản là phạm vi "toàn cầu". Vì vậy, nếu tên biến là "foo", thì mỗi biểu thức EL đơn lẻ được đánh giá trong cùng một bối cảnh EL (về cơ bản, yêu cầu HTTP hiện tại) mà tham chiếu "foo" sẽ được đánh giá theo biểu thức giá trị như được chỉ định trong biến bản đồ. Điều này có mức ưu tiên cao hơn so với các thành phần lặp lại, nếu có. Vì vậy, điều này thực sự có thể dẫn đến xung đột và lặp lại "rỗng" tìm kiếm.
Tốt hơn hãy cung cấp <ui:param>
hoặc <h:dataTable var>
một tên khác. Ví dụ, bạn có thể chọn tiền tố tất cả các biến số <ui:param>
(và <c:set>
) với _
hoặc hơn.
Tôi nghĩ phạm vi của ui: param là yêu cầu và sẽ bị ghi đè trên mọi yêu cầu. – flash
xem câu trả lời của tôi để balus, nếu nó chỉ là yêu cầu thì nó sẽ không ảnh hưởng đến các trang khác –