从支持 bean 调用 PrimeFaces 对话框

Call PrimeFaces dialog from backing bean

我希望当用户未登录时,单击 Add To Card 按钮后,应出现 Login 对话框。

这里是Book.xhtml:

<h:form>
    <p:commandButton value="Add To Card"
                     actionListener="#{booksBean.orderBook()}" 
                     class="QtyBtn">
        <f:ajax execute="@form" rendered="@form"/>
    </p:commandButton>
</h:form>

这是豆子:

@Component
@Scope("session")
public class BooksBean implements Serializable {
...
public void orderBook() {
...

    if (currentUser == null) {  // show the login dialog
        RequestContext.getCurrentInstance().openDialog("Login");
    }

但是Login.xhtml没有打开


首先,您要做的是使用 PrimeFaces Dialog Framework(DF)。 DF 让我们在对话框中打开 XHTML 视图

  1. 把这个添加到你的脸上-config.xml

    <application>
      <action-listener>
        org.primefaces.application.DialogActionListener
      </action-listener>
      <navigation-handler>
        org.primefaces.application.DialogNavigationHandler
      </navigation-handler>
      <view-handler>
        org.primefaces.application.DialogViewHandler
      </view-handler>
    </application>
    
  1. 将您的 login.xhtml 页面创建为 任何 XHTML 页面。

  2. 将相应的结果添加到你的脸上-config.xml。例如,

    <navigation-case>
      <from-outcome>Login</from-outcome>
      <to-view-id>/pages/login.xhtml</to-view-id>
      <redirect />
    </navigation-case>
    
  3. RequestContext.getCurrentInstance().openDialog("Login");

  4. 打开对话框

请注意,DF 在框架内打开新对话框。