1

想象一下,BeanA 绑定到 ViewA.xhtml,BeanB 绑定到 ViewB.xhtml。BeanA 和 BeanB 是支持 bean,每个 bean 只有一个属性:“Object obj;” 与吸气剂和二传手。

现在我在 ViewA 中执行以下操作:

<ui:repeat value="#{someOtherBean.listOfObjects}" var="objSelected">
    <h:commandLink value="someValue" action="ViewB"> 
        <f:setPropertyActionListener target="#{beanB.obj}" value="#{objSelected}" />
    </h:commandLink>
</ui:repeat>

这很好用!我遍历一个列表,我单击的对象(通过 commandLink)被设置为 BeanB。

问题:我需要使用 GET 请求,所以我不得不使用 h:link 或 h:outputLink(顺便说一句,区别在哪里?)。但是这样做,我不能使用 f:setPropertyActionListener 组件,因为 GET 请求不会触发动作事件。

由于没有动作事件,我必须使用 GET 请求,将对象的 ID 作为参数提供给 BeanB。BeanB 然后使用一个 dao 来获取具有指定 ID 的对象。但是这个sux。我不想使用道。所以我的具体问题:

GET 请求链接的 f:setPropertyActionListener 等价物是什么?单击 ah:link 或 h:outputLink 组件时,如何设置 BackingBean 的属性?

我希望有一个解决方案,提前谢谢。

4

1 回答 1

1

将其作为请求参数传递。请求参数只能是字符串,因此您需要先将其(或者更好的是,唯一标识相关对象的最小可能部分)转换为字符串。

这是一个使用对象的(数据库)标识符的示例:

<ui:repeat value="#{someOtherBean.listOfObjects}" var="objSelected">
    <h:link outcome="ViewB"> 
        <f:param name="id" value="#{objSelected.id}" />
    </h:link>
</ui:repeat>

BeanB添加:

@ManagedProperty("#{param.id}")
private Long id;
private SomeObject objSelected;

@PostConstruct
public void init {
    objSelected = objService.find(id);
}

// ...
于 2011-07-12T08:03:32.073 回答