0

我有一个 Seam 应用程序,最初由 seam-gen 生成,带有一个视图 Search.xhtml。

Search.xhtml 有许多输入字段,其中一半绑定到 Office 实体,一半绑定到 Devices 实体。

例如,如果您输入一个主机名,它会绑定到设备中的一个字段,如果您输入一个城市,它会绑定到办公室中的一个字段。

默认情况下,目标页面将为 OfficeResult.xhtml,或者,如果已输入“设备”属性,则为 DeviceResult.xhtml。

我的问题有两部分:

  1. 我应该在 Search.xhtml 中为提交按钮使用什么组件?我假设 h:commandButton,但是我该用什么来执行该操作?如果我使用目标视图,是否会被 page.xml 文件中的导航规则覆盖?

  2. 如何设置我的 Search.page.xml 文件?如何根据参数调整导航?

这是 Search.xhtml(伪代码):

<h:inputText value="#{devicesList.devices.devSerialNum}" />
<h:inputText id="state" value="#{officeList.office.state}" />

<h:commandButton id="search" action="/OfficeResult.xhtml" value="Search"  />

Search.page.xml(伪代码):

<navigation>
  <rule if devSerNum is set >
<redirect view-id="/DeviceResult.xhtml"/>
  </rule>
  <rule if state is set >
    <redirect view-id="/OfficeResult.xhtml"/>
  </rule>
</navigation>
4

2 回答 2

0

我也很难理解导航的工作原理。我终于在某种程度上工作了,这里有一些我会尝试的想法:

  1. 首先使用 pages.xml 来验证您是否可以使用默认的简单规则集进行导航。/WEB-INF/pages.xml

  2. 如果您不确定发生了什么,请为您的应用程序启用跟踪日志级别,可能是 Seam 找不到组件。2.1 如果您没有在 components.xml 中导入它,则可能找不到 #{devicesList ... },除非该组件的名称是 devicesList。我的组件使用它们的完全限定名称 com.stackoverflow ...这样做的好处是,您可以避免冲突,但要访问该组件,您必须写出完整路径或如上所述进行导入。

  3. 验证视图 ID 是否存在(/OfficeResult.xhtml 和 /DeviceResult.xhtml)

  4. 确保每个页面只声明一次

  5. 根据我的理解,您的 commandButton 应该是一个实际的组件。如果你有一个 searchAction,那么它会是这样的:

    #{searchAction.search}

查看接缝示例,它们运行良好,并向您展示了如何做许多不同的事情。您可以在大约 130 MB 的 seam 源代码中下载它们,包括所有这些示例。

沃尔特

于 2009-07-06T23:12:18.993 回答
0

如果我正确理解了您的问题,并且根据您当前的设计,我相信您可以做类似的事情:

您的Search.xhtml文件:

<h:inputText value="#{devicesList.devices.devSerialNum}" />
<h:inputText id="state" value="#{officeList.office.state}" />

<h:commandButton id="search" action="#{devicesList.isDeviceSearch()}" value="Search"  />

向DevicesList.java文件添加新方法

@Name("devicesList")
public class DevicesListImpl implements DevicesList {

    ...other properties and methods...

    public boolean isDeviceSearch() {

        boolean result;

        ...logic to determine if the search value exists...

        return result;

    }
}

然后在您的Search.page.xml文件中:

<navigation from-action="#{devicesList.isDeviceSearch()}">
    <rule if-outcome="true">
        <redirect view-id="/DeviceResult.xhtml" />
    </rule>

    <redirect view-id="/OfficeResult.xhtml" />
</navigation>
于 2009-07-31T09:53:38.333 回答