2012-06-28 25 views
7

Tôi đang cố thực hiện chuyển hướng từ index.xhtml sang registerFirstTime.xhtml.Làm thế nào để gọi một nút lệnh mà không xác nhận tất cả các đầu vào cần thiết?

Mã trong index.xhtml trang là:

<h:form id="content" style="margin-top: 1em;"> 
    <p:panel id="panel" header="LOGIN"> 
     <p:messages id="msgs" globalOnly="true"/> 
     <h:panelGrid columns="3"> 
      <h:outputLabel value="e-mail" /> 
      <p:inputText id="name" required="true" value="#{UserBean.email}" 
       requiredMessage="Required: e-mail" display="icon"> 
      </p:inputText> 
      <p:message id="msgName" for="name"/> 
      <h:outputLabel value="Password" /> 
      <p:password id="password" required="true" value="#{UserBean.password}" 
       requiredMessage="Required: Password" display="icon" feedback="false"> 
      </p:password> 
      <p:message id="msgPassword" for="password"/> 
     </h:panelGrid> 
     <h:panelGrid columns="2"> 
      <p:commandButton value="Login" actionListener="#{UserBean.validate}" update="msgNombre, msgPassword, msgs"/> 
      <h:commandButton value="Register for the first time" action="register"/> 
     </h:panelGrid> 
    </p:panel> 
</h:form> 

Trong khi, nội dung của chuyển hướng, trong faces-config.xml, là:

<navigation-rule> 
    <from-view-id>index.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>register</from-outcome> 
     <to-view-id>registerFirstTime.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

Cho đến khi tên đầu vào và mật khẩu được điền, bạn không thể thực hiện chuyển hướng. Làm cách nào tôi có thể thực hiện chuyển hướng bản ghi mà không tính đến các trường bắt buộc? Cảm ơn! =)

+0

Ý của bạn là chuyển hướng khi gửi mà không điền giá trị? – NaaN

+0

Có, tôi cần phải thực hiện một giá trị điền đầy chuyển hướng (đăng nhập), nhưng tôi cũng cần các giá trị điền không có chuyển hướng (đăng ký) khác. –

+0

Tôi đã chứng minh để đặt h: commandButton trong một h: hình thức, và nó hoạt động, nhưng là có bất kỳ có thể để đặt h: commandButton trong h: form với nội dung id? –

Trả lời

26

Thêm immediate="true" vào nút lệnh nên bỏ qua việc xử lý tất cả trường nhập không có thuộc tính immediate="true".

<h:commandButton value="Register for the first time" action="register" immediate="true" /> 

Không liên quan cho vấn đề cụ thể, xin lưu ý rằng bạn đang về mặt kỹ thuật không gửi một chuyển hướng ở đây. Điều này về cơ bản sẽ gửi chuyển tiếp, tức là URL trong thanh địa chỉ trình duyệt vẫn là URL của trang đăng nhập. Bạn cần thêm <redirect/> vào <navigation-case>. Cũng xin lưu ý rằng các trường hợp điều hướng là một phần còn lại của JSF 1.x. Vì JSF 2.x bạn có thể thực hiện "điều hướng ngầm", nhờ đó bạn chỉ cần chỉ định ID xem là kết quả.

<h:commandButton value="Register for the first time" action="registerFirstTime?faces-redirect=true" immediate="true" /> 

Bằng cách này, bạn có thể loại bỏ hoàn toàn trường hợp điều hướng.

6

giải pháp @BalusC nên thực hiện thủ thuật như mọi khi. Nhưng tôi muốn chỉ ra một vài điều vì bạn dường như đang sử dụng Primefaces. Cả hai đều không liên quan đến câu hỏi nhưng có thể giúp bạn tại một số điểm.

Trước tiên, bạn có thể sử dụng điều hướng ngầm (được giới thiệu trong JSF2). Bằng cách đó bạn sẽ không cần phải định nghĩa tất cả các quy tắc điều hướng trong tệp faces-config.xml của bạn (tôi làm việc trên một dự án JSF 1.2 cũ và ghét sự cần thiết phải xác định vai trò điều hướng cho mọi thứ). Đây là cách bạn muốn làm điều đó:

<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true"/>

Tham số faces-redirect buộc chuyển hướng thay vì một về phía trước, trong trường hợp bạn cần điều đó.

Ngoài ra, giả sử bạn muốn xử lý đúng một số giá trị, nhưng không phải tất cả các giá trị đó. Trong trường hợp đó, bạn có thể sử dụng thuộc tính quá trình của p: commandButton hoặc p: ajax. Ví dụ

<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true" process="@this, name"/>

này sẽ làm cho quá trình JSF chỉ nút (@this) và các thành phần với id = "Tên" (lĩnh vực e-mail của bạn). Một lần nữa, nó có thể không áp dụng cho câu hỏi này, nhưng đó là một cái gì đó tôi sử dụng thường xuyên.

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