1

我想在上传单个文件后重定向到另一个页面。源 xhtml 和目标 xhtml 位于同一目录中。我尝试在 fileUploadListenerMethod 中返回一个字符串:

public String loadFills(FileUploadEvent event) throws Exception {
  return "treeOrderRequestStatus";
}

但这不会导致重定向。

我也尝试通过 faces-config.xml 完成它:

<navigation-rule>
  <from-view-id>/userpages/manualDataLoad.xhtml</from-view-id>
  <navigation-case>
    <from-action>#{manualDataLoader.loadFills}</from-action>
    <to-view-id>/userpages/treeOrderRequestStatus.xhtml</to-view-id>
    <redirect/>
  </navigation-case>
</navigation-rule>

<navigation-rule>
  <from-view-id>/userpages/manualDataLoad.xhtml</from-view-id>
  <navigation-case>
    <from-outcome>treeOrderRequestStatus</from-outcome>
    <to-view-id>/userpages/treeOrderRequestStatus.xhtml</to-view-id>
    <redirect/>
  </navigation-case>
</navigation-rule>

这些都不起作用。

最后,我尝试执行由 uploadcomplete 事件触发的链接:

<rich:fileUpload fileUploadListener="#{manualDataLoader.loadFills}"
    maxFilesQuantity="1" createTempFiles="false" uploadLabel="Import Fill Data"
    addLabel="Select Fill File">
  <a4j:ajax event="uploadcomplete" execute="redirect"/>
</rich:fileUpload>

<h:link id="redirect" outcome="treeOrderRequestStatus"/>

仍然没有骰子。在每一次尝试中,我都尝试了多种不同的指定目标页面的组合(例如:包括 .xhtml 扩展名,包括目录,...),但尚未成功。

我究竟做错了什么?

4

1 回答 1

1

执行属性标签是定义将在请求中发送到服务器的组件。您可以尝试使用标签组件中的uploadcompleteJavaScript 方法单击链接/按钮:<rich:fileUpload>

<rich:fileUpload fileUploadListener="#{manualDataLoader.loadFills}"
    maxFilesQuantity="1" createTempFiles="false" uploadLabel="Import Fill Data"
    addLabel="Select Fill File">
  <a4j:ajax event="uploadcomplete" onbegin="document.getElementById('yourFormName:redirect').click();" />
</rich:fileUpload>

<h:commandButton id="redirect" action="treeOrderRequestStatus" style="display: none"
    tabindex="-1" />

此外,最好删除 faces-config.xml 中的这些导航规则,以保持文件中没有不必要的配置。

于 2012-07-18T19:47:27.663 回答