我有一个从我的对象模型呈现cardStatus值的<h:selectOneMenu>
。CardStatus具有布尔属性'temporaryDisabled‘,这意味着该值仍然有效,但不应由用户使用。
现在,如果我的模型将cardStatus设置为临时禁用的值,我如何在下拉框中显示该值,同时仍然防止用户将该值更改为另一个临时禁用状态?
如果我只是从我提供给<h:selectOneMenu>
的SelectItems列表中删除禁用的卡状态,那么当select被呈现时,它将自动选择列表中的第一个项目,并在下次提交它,从而错误地更改我在模型中的值。
如果我将禁用的卡状态包含在SelectItems列表中,但将相应项目的disabled属性的值设置为true,则它们在HTML disabled中呈现,而不提交,因此我在我的模型中得到空值,这也是错误的。
我被卡住了。我们非常感谢您的任何建议。
最好的问候,丹。
发布于 2011-02-21 19:07:15
最后,我使用了一段在页面加载后执行的jQuery代码。
<h:selectOneMenu
id="cardStatus"
value="#{someBean.cardStatus}"
converter="selectItemConverter">
<f:selectItem itemValue="E|A" itemLabel="Active" />
<f:selectItem itemValue="E|S" itemLabel="Stolen" />
<f:selectItem itemValue="D|B" itemLabel="Blocked" />
<f:selectItem itemValue="E|L" itemLabel="Lost" />
<f:selectItem itemValue="D|C" itemLabel="Counterfeit" />
</h:selectOneMenu>
javascript代码的作用是扫描所有项,并使用jQuery的()函数为每个值以前缀D|开头的项隐藏该项。这样,组合框的作用是所有的值都将是有效/启用的,但用户将无法选择非活动值,因为它们不可见。此外,如果默认选择的值是以D|开头的值之一,则该值仍将显示为默认值,但用户无法在他/她可以选择的选项列表中看到它。
发布于 2011-02-17 23:01:11
“这意味着该值仍然有效,但不应由用户使用”
帮我理解这首曲子。您想在h:selectOneMenu中显示这些选项,但不允许用户选择它们吗?我想我不明白,如果他们是无效的选项,你为什么要向用户展示他们呢?
你可以创建一个验证器来验证"temporaryDisabled“,如果这就是你想要实现的……让我更多地了解您希望最终用户看到的内容,我可能会提供帮助。
发布于 2011-02-18 02:49:21
<h:selectOneMenu
id="cardStatus"
value="#{someBean.cardStatus}"
converter="selectItemConverter">
<f:selectItem itemValue="#{null}" itemLabel="" />
<f:selectItems
value="#{cardStatusBean.cardStatuses}"
var="cardStatus"
itemValue="#{cardStatus}"
itemLabel="#{cardStatus.name}"
itemDisabled="#{cardStatus.temporaryDisabled}"/>
</h:selectOneMenu>
这将为您提供一个默认选择,其值为null,标签为空。这会实现你正在寻找的目标吗?
https://stackoverflow.com/questions/5008085
复制相似问题