【问题标题】:PrimeFaces selector which includes inputs of components with hidden input fieldsPrimeFaces 选择器,包括具有隐藏输入字段的组件的输入
【发布时间】:2023-03-12 10:56:01
【问题描述】:

我想用PrimeFaces Selectors处理某个组中的所有输入组件,其中包括几个p:rating字段。

我将我的用例最小化为 XHTML:

<h:form>
  <h:panelGroup styleClass="myGroup">
    <p:rating value="#{myBean.rating}"/>
    <p:commandButton value="Save"
                     process="@(.myGroup :input)"
                     action="#{myBean.save()}"/>
  </h:panelGroup>
</h:form>

豆子:

@Named
@ViewScoped
public class MyBean implements Serializable {

  private Integer rating; // Getter and setter are present

  public void save() {
    System.out.println("Rating: " + rating);
  }

}

使用上述选择器不会处理评级。如果我将组件更改为p:inputText,它正在工作。如果我删除进程属性,它也可以工作。我认为这与隐藏输入 p:rating 用于其价值有关。

我的问题:您能否创建一个 PrimeFaces 选择器,其中包含带有隐藏输入字段的组件的输入?

【问题讨论】:

  • 你试过@(.myGroup :input :hidden) ???
  • @Melloware 哦,哇,这确实有效!你能从中创造出答案吗?这也必须添加到文档中。
  • 我仍然不明白它是如何工作的。我认为选择器的工作方式与 CSS 规则的工作方式相同。对我来说,该规则将读取为任何输入的子项的所有隐藏输入,但显然情况并非如此。

标签: primefaces


【解决方案1】:

:hidden 是一个特殊的 Jquery 选择器,不是 CSS 的一部分。

见:https://api.jquery.com/hidden-selector/

所以将选择器更改为:

@(.myGroup :input :hidden)

但我怀疑这对你来说是个大问题,但请务必阅读 jQuery :hidden 文档中的“附加说明”部分。

在您的情况下也可以使用的替代方法是使用p:fragment

<h:form>
  <p:fragment>
    <p:rating value="#{myBean.rating}"/>
    <p:commandButton value="Save"
                     action="#{myBean.save()}"/>
  </p:fragment>
</h:form>

【讨论】:

  • 它仍然觉得这不是 100% 正确的。在简单的情况下,这对我使用 Chrome 时有效,但在更复杂的页面上,它在使用 Firefox 时有效,但在使用 Chrome 时无效。
  • 你知道这些选择器是如何处理的吗?他们是委托给 jQuery 的吗?换句话说,我应该能够在我的浏览器 JS 控制台中测试它们吗?
  • 我不明白这一点,但@(.myGroup :hidden :input) 似乎在 Chrome 和 Firefox 中都有效。虽然我可以创建一个小型复制器......这是最让我烦恼的。
  • 我不确定 PFS 选择器框架是如何工作的,但我的印象是它使用 Jquery 来选择项目。
  • 确实 p:fragment 是我要找的东西!
猜你喜欢
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
相关资源
最近更新 更多