2

我真的很喜欢 actionListener 以及将整个对象作为参数传递的可能性,而不是需要将值作为字符串传递或创建(隐藏)表单字段。我正在使用 JSF 2.1 (Mojarra) 和 RichFaces (用于 popupPanel)。

目前我遇到了以下问题:

我创建了一个带有打开弹出窗口的按钮的表格。在该弹出窗口中,用户可以编辑表中当前用户/对象的数据。

当我单击弹出窗口中的按钮以保存编辑时,如何从弹出窗口提交值并告诉 bean 操作我正在编辑哪个 userObject?

目前,我的解决方法是在弹出窗口中使用隐藏的 inputText 字段,但我不喜欢这种方式。有替代方案吗?

这是我试图实现的(最小化):

<h:datatable value="#{bean.users}" var="user">
  <h:column>
    Username #{user.name}
  </h:column>
  <h:column>
    <input onclick="showPopup()"/>
  </h:column>
</h:datatable>

<rich:popupPanel>
  <h:inputText value="#{bean.text}" />
  <h:commandButton value="Action" actionListener="#{bean.doSomething}">
    <f:attribute name="selected" value="#{userObjectFromDatatable}" />  <-- HOW? -->
  </h:commandButton>
</rich:popupPanel>
4

1 回答 1

1

看起来很简单,您可以将选定的 保存userObject在类似对话的范围内,如@ViewScoped. 有关. _ _ @ViewScope例如,将所需类型的变量声明为支持 bean 中的实例变量

  UserObject userObject;
  //getters and setters

在您的表中,您现在将有类似以下内容的内容来在您的支持 bean 中设置选定的对象

   <h:commandButton value="Action" actionListener="#{bean.doSomething}">
    <f:setPropertyActionListener value="#{user}" target="#{bean.userObject}"/> 
   </h:commandButton>

通过在表中设置支持 bean 中的变量,viewscope 将确保您对该对象执行的任何其他操作都将使用相同的实例,前提是您保持在同一个 JSF 视图上并且离开它。

于 2012-12-08T19:07:06.020 回答