在JSF GET方法中使用h:link和h:按钮时如何从数据库中获取数据

时间:2011-11-15 19:26:31

标签: java jsf java-ee ejb

我有一个实体的简单应用程序。实体是Car,所以我制作了CRUD方法和“全车”方法。我正在使用JSF创建一个网站,其中包含旁边有编辑/显示/删除链接的汽车列表。而不是使用POST我想在显示/编辑链接上使用GET。到目前为止,我已经使用带有id作为参数的h:link,并将它们作为viewParams在show页面中设置。

整个应用程序有效,但我有一个问题。目前我正在进行EJB调用,该调用从set-method中的ID中找到适当的汽车,用于支持bean中的汽车ID。我还没有找到另一种方法,所以我想知道这是否正确?因为我没有一个与h:commandButton相同的方法调用的action方法,并返回它将导航到的页面的字符串。

1 个答案:

答案 0 :(得分:2)

您可以使用<f:event type="preRenderView">在呈现视图之前触发视图操作。

E.g。

<f:metadata>
    <f:viewParam name="id" value="#{cars.id}" />
    <f:event type="preRenderView" listener="#{cars.init}" />
</f:metadata>

@ManagedBean
@ViewScoped
public class Cars {

    private Long id;
    private Car car;

    @EJB
    private CarService service;

    public void init() {
        car = service.find(id);
    }

    // ...
}

请注意,在即将推出的JSF 2.2中,<f:event type="preRenderView">可以替换为更加自我记录的新<f:viewAction>

<f:metadata>
    <f:viewParam name="id" value="#{cars.id}" />
    <f:viewAction action="#{cars.init}" />
</f:metadata>

另见: