如何在应用程序级别转义 Primefaces SelectOneMenu 的双引号?

How to escape double quotes for Primefaces SelectOneMenu in Application level?

使用PrimeFaces,当p:selectOneMenuitemLabel的内容有字符双引号(")时,selectOneMenu停止工作(不能select项)。 例如,在下面的代码中是不可能 select: Item "2"

有没有办法从整个应用程序中转义或替换每个 selectOneMenu 中的双引号?

也许使用标签装饰器或标签处理程序?

@Named(value = "bb")
@ViewScoped
@Getter @Setter
public class BB implements Serializable {

    List<String> items;
    String selectedItem;

    @PostConstruct
    public void init() {
        items = new ArrayList<>();
        items.add("Item 1");
        items.add("Item \"2\""); // <= note the double quotes here.
        items.add("Item 3");
    }

    public void logSelected() {
        System.out.println(selectedItem);
    }
}
    <h:form>
        <p:selectOneMenu value="#{bb.selectedItem}">
            <f:selectItems value="#{bb.items}"/>
        </p:selectOneMenu>

        <p:commandButton action="#{bb.logSelected}"
                         process="@form"
                         update="@form"
                         value="GO"/>
    </h:form>

当我尝试 select 'Item "2"' 时,控制台日志中显示以下错误:

Uncaught Error: Syntax error, unrecognized expression: [data-label="Item "2""]
    at Function.ga.error (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at ga.tokenize (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at ga.compile (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at ga.select (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at ga (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at Function.ga.matches (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at Function.r.filter (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at E (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at r.fn.init.filter (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:2)
    at c.setLabel (eNptjUsOgzAMRE9E2XMbEwwkcmxjJ6qQenh-i6qF1UhvnmbUYsYRAnqXloq2tle8kn_02wUxvKGswsjF_4qfnUapTpFPp1KJGRqCVWrpkrcMLB5MiNAeBX9HPX9n8HmAAgecSHqgnW7lbUr_.js.xhtml?ln=omnifaces.combined&v=1558274343370:38)

经验证已在 PrimeFaces 7.0 中修复。

但是,它也可能在 6 中得到修复。2.X 取决于应用了哪个修复。

6.2.9: https://github.com/primefaces/primefaces/issues/3982

7.0: https://github.com/primefaces/primefaces/issues/3466

看来这个问题已在 PrimeFaces 10.0.0 中重新引入并在版本 10.0.9 中修复:

10.0: https://github.com/primefaces/primefaces/issues/7878