【问题标题】:PrimeFaces button navigation actionPrimeFaces 按钮导航操作
【发布时间】:2012-12-17 10:52:44
【问题描述】:

我在通过按钮导航页面时遇到问题。

我现在的xhtml sn-p是这样的:

<p:layoutUnit position="west" size="200" header="Menü" resizable="true" closable="true" collapsible="true">
            <p:column>
                <p:commandButton type="button" value="New Project" icon="ui-icon-document" action="#{createProject.create()}"/>


                <p:commandButton type="button" value="All Projects" icon="ui-icon-folder-open"/>

                <p:commandButton type="button" value="Edit" icon="ui-icon-pencil"/>

                <p:commandButton type="button" value="Delete" icon="ui-icon-closethick"/>

                <p:separator />
                <p:commandButton type="button" title="Yazdır" icon="ui-icon-print"></p:commandButton>
            </p:column>

        </p:layoutUnit>

在这里,当我点击新建项目时,它不会导航到相关页面。

我的 bean 文件:

  @ManagedBean
@RequestScoped
public class CreateProject {
    /**
     * Creates a new instance of CreateProject
     */
    public String create() {
        return "newproject.xhtml";
    }
}

单击按钮时如何导航用户?

编辑:这是我的面孔配置

    <faces-config
    version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
    <managed-bean>
        <managed-bean-name>loginBean</managed-bean-name>
        <managed-bean-class>com.ibb.source.LoginBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>myProjects</managed-bean-name>
        <managed-bean-class>com.ibb.source.MyProjects</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>myCalendar</managed-bean-name>
        <managed-bean-class>com.ibb.source.MyCalendar</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/panel.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>create</from-outcome>
            <to-view-id>newproject.xhtml</to-view-id>
        </navigation-case>
  </navigation-rule>
    <managed-bean>
        <managed-bean-name>createProject</managed-bean-name>
        <managed-bean-class>com.ibb.source.CreateProject</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
      </managed-bean>
        <managed-bean>
            <managed-bean-name>inPlaceEditor</managed-bean-name>
            <managed-bean-class>com.ibb.source.InPlaceEditor</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
        <managed-bean>
            <managed-bean-name>projectsList</managed-bean-name>
            <managed-bean-class>com.ibb.source.ProjectsList</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
        <navigation-rule>
           <from-view-id>panel.xhtml</from-view-id>
           <navigation-case>
               <from-outcome>newproject</from-outcome>
               <to-view-id>/newproject.xhtml</to-view-id>
           </navigation-case>
        </navigation-rule>
        <managed-bean>
            <managed-bean-name>allProjects</managed-bean-name>
            <managed-bean-class>com.ibb.source.AllProjects</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
        <managed-bean>
            <managed-bean-name>allProjectsList</managed-bean-name>
            <managed-bean-class>com.ibb.source.AllProjectsList</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
    </faces-config>

【问题讨论】:

  • 你试过在 faces-config 中使用 navigation-rule

标签: ajax jsf primefaces


【解决方案1】:

默认情况下,PrimeFaces 的commandButton 组件使用 ajax 发送命令,因此导航将不起作用。将ajax 属性设置为false

<p:commandButton ajax="false" value="New Project" icon="ui-icon-document" action="#{createProject.create()}" />

还要确保您的按钮位于表单元素内。在整个 &lt;p:layoutUnit&gt; 标签周围放置一个 &lt;h:form&gt; ... &lt;/h:form&gt;

【讨论】:

  • @Ali “不起作用”是什么意思?页面是否重新加载但仍保留在同一页面中?还是什么都没发生?或者你得到错误?
  • @Ali 您是否尝试过使用标准命令按钮 (&lt;h:commandButton&gt;)?
  • 我也尝试过使用 。它保持这样。该页面既不会重新加载,也不会保留。就像您单击下面没有代码的按钮来触发它一样。我也尝试过在 faces-config 中使用导航规则
  • @Ali 这有点奇怪,我不明白你的说法。当您单击一个按钮(将 ajax 设置为 false)时,应该会发生以下情况:您的页面应该重新加载到相同的 URL;湾。您的页面应该加载到一个新的 URL; C。你应该得到一个错误; d。绝对没有任何事情发生! (最后是启用ajax的情况)。
【解决方案2】:

这段代码:

type="button"

使 commandbutton 成为一个简单的 javascript 触发器。 如果你想在服务器上做任何事情,你必须删除 type="button"。 此外,您在操作标签上定义的方法必须返回与您所需视图相对应的字符串,并且您不需要使用 xml 来定义导航。 祝你有美好的一天!

【讨论】:

    【解决方案3】:

    添加到 faces-config.xml

    <navigation-rule>
           <from-view-id>page1.xhtml</from-view-id>
           <navigation-case>
               <from-outcome>page2</from-outcome>
               <to-view-id>/newproject.xhtml</to-view-id>
           </navigation-case>
        </navigation-rule>
    
    
    
    @ManagedBean
    @RequestScoped
    public class CreateProject {
        /**
         * Creates a new instance of CreateProject
         */
        public String create() {
            return "page2";
        }
    }
    
     <p:commandButton type="button" value="New Project" icon="ui-icon-document" action="#{createProject.create}"/>
    

    【讨论】:

    • 检查你的 create 方法是否被调用?在 create() 中使用一些打印。
    • @Ali,你找到解决方案了吗?
    • create() 方法是否正在调用?
    • 它在召唤。但我不知道如何让它工作。
    【解决方案4】:

    我遇到了同样的问题。我通过使用button 而不是commandButton 解决了这个问题。请注意,使用outcome 代替action

     <p:button ajax="false" value="New Project" icon="ui-icon-document" outcome="#{createProject.create}" />
    

    【讨论】:

      【解决方案5】:

      要在按下commandButton 时执行操作,您需要更改:

      <p:commandButton type="button" value="New Project" icon="ui-icon-document" action="#{createProject.create()}"/>
      

      到:

      <p:commandButton type="button" value="New Project" icon="ui-icon-document" action="#{createProject.create}"/>
      

      没有“()

      方法返回的字符串可以是页面(如您的示例)或导航规则(faces-navigation)

      【讨论】:

      • 您要返回的页面是否与此页面位于同一文件夹中?
      • 删除 [type="button"] 部分并重试。 CommandButton 已经指示 type="button"。
      • 当我删除它时,它什么也不做。它给出:CommandButton:“j_idt17”必须在表单元素内
      • p:commandButton 应始终位于表单内。将您的按钮包含在 h:form 标记中,这应该可以工作
      • 可能是因为嵌套形式? @AliYucelAkgul
      猜你喜欢
      • 2020-10-15
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多