可以通过 Ctrl+click 或 Middleclick 像链接一样在新 window 中打开 p:button

Make possible to open p:button in new window by Ctrl+click or Middleclick like links

我有一个 primefaces (5.1) 数据表,最右边的列中有一些按钮:

            <p:column headerText="Actions" style="width: 60px">
                <p:button id="uploadButton" title="upload files"
                    icon="fa fa-edit" outcome="uploadFilesToVersion">
                    <f:param name="versionId" value="#{version.id}" />
                </p:button>

            <!-- other buttons come here-->

            </p:column>

注意 "version" 是环境的局部(循环)变量 p:dataTable 而 uploadFilesToVersion.xhtml 是用户上传文件到 "version" 的视图id = version.id)

请注意,该按钮不会调用任何 bean 方法,我只是使用了 p:button 元素,因为它的样式。现在我想让用户可以在新的浏览器 tab/window 中打开按钮的结果(即 URL)。这将是有益的,因为我希望同时保留 dataTable 的过滤器状态(当用户在浏览器中单击 "back" 时它会丢失)。

如何实现?

编辑:当然可以使用一些 CSS 来模仿按钮的外观,但我想避免这种情况:

            <p:column headerText="Actions" style="width: 60px">

              <p:link id="uploadButton" title="upload files"
                outcome="uploadFilesToVersion"
                styleClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only">
                 <span class="ui-button-icon-left ui-icon ui-c fa fa-edit"></span>              
                 <span class="ui-button-text ui-c">ui-button</span>
                 <f:param name="versionId" value="#{version.id}" />
            </p:link>

        <!-- other buttons come here-->

        </p:column>

不可能,因为 <p:button> 使用 JavaScript 而不是 <a href> 导航。您正在寻找的行为只能使用 <a href>.

您最好的选择是使用 <h|p:link>,它会生成 <a>,并将其样式设置为看起来像一个按钮。

<h:link ... styleClass="ui-button ui-state-default ui-corner-all">
    <i class="fa fa-edit" />
</h:link>

必要时用 tagfile 包装以减少样板文件。

<my:linkButton ... icon="fa fa-edit" />