2012-02-16 24 views
5

Tôi có một biểu mẫu chứa một menu thả xuống và hai trường nhập.thuộc tính bắt buộc của inputText phải phụ thuộc vào giá trị đã gửi của một thành phần khác

<h:selectOneMenu /> 
<h:inputText /> 
<h:inputText /> 

Tôi muốn làm cho thuộc tính bắt buộc của các trường nhập có điều kiện tùy thuộc vào giá trị đã chọn của menu thả xuống. Nếu người dùng chọn mục đầu tiên của trình đơn thả xuống thì các trường nhập phải được yêu cầu. Nếu người dùng chọn mục thứ hai, thì những người đó sẽ không được yêu cầu.

Tôi làm cách nào để đạt được điều này?

Trả lời

8

Chỉ cần gắn trình đơn thả xuống vào chế độ xem và trực tiếp kiểm tra giá trị của nó trong thuộc tính required.

<h:selectOneMenu binding="#{menu}" value="#{bean.item}"> 
    <f:selectItem itemValue="first" itemLabel="First item" /> 
    <f:selectItem itemValue="second" itemLabel="Second item" /> 
</h:selectOneMenu> 

<h:inputText value="#{bean.input1}" required="#{menu.value eq 'first'}" /> 
<h:inputText value="#{bean.input2}" required="#{menu.value eq 'first'}" /> 

Lưu ý rằng ví dụ binding là đúng. Đừng tuyệt đối không đặt nó vào một thuộc tính bean ở đây. Xem thêm How does the 'binding' attribute work in JSF? When and how should it be used?

Cũng lưu ý rằng thứ tự của các thành phần là đáng kể. Nếu trình đơn nằm bên dưới đầu vào trong cây, hãy sử dụng #{menu.submittedValue eq 'first'} để thay thế. Hoặc nếu bạn muốn độc lập với điều đó, hãy sử dụng #{param[menu.clientId] eq 'first'} để thay thế.

+0

Khi biểu mẫu được gửi , giá trị selectOneMenu sẽ không có giá trị mới được áp dụng khi xác thực xảy ra. Thuộc tính 'ngay lập tức' trên lựa chọn có thể nhận được vòng đó. – McDowell

+0

Hoặc theo thành phần ràng buộc, ví dụ trên giả định rằng thành phần được định vị trước các đầu vào. – BalusC

+0

Nó có vẻ là một giải pháp dễ dàng nhưng tiếc là nó không hoạt động. "Menu.value" không có giá trị là thuộc tính "ngay lập tức" được đặt thành true cho selectOneMenu – user1213679

4

Giả sử bạn đang sử dụng JSF 2.0: Hãy SelectOneListBox bạn thực hiện với ajax và tái làm cho lĩnh vực đầu vào thay đổi của hộp danh sách:

Một phác thảo nhanh chóng:

<h:selectOneMenu value="#{myBean.myMenuValue}"> 
    <f:ajax render="input1"/> 
    .. 
</h:selectOneMenu> 

<h:inputText id="input1" value="#{myBean.myInputValue}" 
      required="#{myBean.myMenuValue == 'firstEntry'}" /> 
Các vấn đề liên quan