0

我已经成功地使用了 PrimeFaces selectOneButton - 使用 PF 3.5。突然,它停止了工作,第一个按钮总是不可点击——网页代码和支持 bean 代码都没有变化(这会影响它)。

<p:selectOneButton value="#{bean.result}">
                        <f:selectItems value="#{bean.options}" />
                        <p:ajax event="change" process="popupPanel"
                            update="Grid"
                            listener="#{myBackingBean.submitItem(bean.itemId)}" />
                    </p:selectOneButton>

我有一个关于为什么第一个按钮不可点击的理论。

来自 PrimeFaces SelectOneButton 展示:

SelectOneButton 是一个输入组件,用于使用常规按钮而不是单选按钮来选择选项

所以,SelectOneButton确实是单选按钮,但显示时触感很好;)

现在,带有两个选项的 selectOneButton 的渲染 HTML 如下;

<div class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-left ui-state-active">
<input id="mainForm:Grid:0:j_idt64:0" name="mainForm:Grid:0:j_idt64" type="radio" value="Yes" class="ui-helper-hidden" checked="checked">
<span class="ui-button-text ui-c">Yes</span>
</div>

<div class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-right">
<input id="mainForm:Grid:0:j_idt64:1" name="mainForm:Grid:0:j_idt64" type="radio" value="No" class="ui-helper-hidden">
<span class="ui-button-text ui-c">No</span>
</div>

我注意到两个不同... 1) div 类是不同的。2)第一个选项已检查=“检查”

1)检查 div 类的 CSS,我看不到任何会使按钮无法点击的主要内容。2)显然,因为它真的是一个单选按钮,所以第一个选项是“选中”。

现在,当单击一个普通的旧标准单选按钮时,您不能单击它来“释放它” - 一旦单击它就被单击,并且需要单击其他单选按钮来更改选项。

由于我的第一个选项总是“选中”,这会阻止按钮“可点击”吗?有没有其他人经历过类似的事情?环顾四周,我似乎是唯一遇到此问题的人。

我可以做变通方法,但我不知道为什么它突然停止工作,宁愿找到解决方案!

任何帮助表示赞赏!

更新

幸运的是,我找到了我的 webapp 的旧版本,并检查了呈现的 HTML。

这是第一个按钮的以下 HTML(在我当前的版本中无法点击)。

<div class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-left">
<input id="mainForm:Grid:0:j_idt63:0" name="mainForm:Grid:0:j_idt63" type="radio" value="Yes" class="ui-helper-hidden">
<span class="ui-button-text ui-c">Yes</span>
</div>

我上面描述的两个区别在我以前的版本中没有呈现 - div 类中没有“ui-state-active”,我的也没有“checked='checked'”<input />

我在当前(不可点击的)版本上手动编辑了 HTML,并删除了“checked='checked'”——这没有效果。然后我从我的 div 类中删除了“ui-state-active” - 现在该按钮是可点击的。

我仍然对为什么 HTML 现在呈现不同的方式感到困惑,我可以改变什么来实现这一点?

再次感谢。

4

1 回答 1

0

几个小时后,我终于明白了为什么......

正如我在问题中所说,

SelectOneButton 是一个输入组件,用于使用常规按钮而不是单选按钮来选择选项

SelectOneButtons 是单选按钮。

在同一个网页中,我还使用非常相似的代码将单选按钮用作选项...

<p:selectOneRadio value="#{bean.result}">
<f:selectItems value="#{bean.options}" />
</p:selectOneRadio>

现在,我遇到了问题,当用户看到这些单选按钮时,没有一个被选中。这允许用户返回null。现在,我不希望用户能够返回 null,因此需要单选按钮 - 一个或另一个。因此,我在页面呈现之前设置#{bean.result}为第一个元素,因此当用户看到按钮时,默认选择第一个元素。#{bean.options}

因此,当selectOneButton's 被渲染时,第一个“按钮”被选中,你无法按下它。

于 2013-11-14T15:07:09.213 回答