Jsf <;h:选择一个功能表>;使用临时禁用的SelectItems

Jsf <;h:选择一个功能表>;使用临时禁用的SelectItems,jsf,Jsf,我有一个,它从我的对象模型中呈现cardStatus的值。 CardStatus具有布尔属性“temporaryDisabled”,这意味着该值仍然有效,但不应由用户使用 现在,如果我的模型已将cardStatus设置为临时禁用状态,我如何在下拉组合框中显示该值,并且仍然阻止用户将该值更改为另一个临时禁用状态 如果我只是从我提供给的SelectItems列表中删除禁用的卡状态,那么当SelectItems呈现时,它将自动选择列表中的第一个项目,并在下次提交,从而错误地更改我在模型中的值 如果我在

我有一个
,它从我的对象模型中呈现cardStatus的值。 CardStatus具有布尔属性“temporaryDisabled”,这意味着该值仍然有效,但不应由用户使用

现在,如果我的模型已将cardStatus设置为临时禁用状态,我如何在下拉组合框中显示该值,并且仍然阻止用户将该值更改为另一个临时禁用状态

如果我只是从我提供给
的SelectItems列表中删除禁用的卡状态,那么当SelectItems呈现时,它将自动选择列表中的第一个项目,并在下次提交,从而错误地更改我在模型中的值

如果我在SelectItems列表中包括禁用的卡片状态,但将其对应项目的disabled属性的值设置为true,则它们将以HTML disabled呈现,而不是Submited,因此我在模型中得到的值为空,这也是错误的

我被卡住了。任何建议都将不胜感激

致以最良好的祝愿, 丹

“这意味着该值仍然有效,但用户不应使用”

帮我理解这篇文章。是否要在h:SelectOne菜单中显示这些选项,但不允许用户选择?我想我不明白,如果它们对用户来说是无效的选项,为什么您会将它们呈现给用户

你可以创建一个验证器,根据“临时禁用”进行验证,如果这是你想要实现的。。。让我了解更多您希望最终用户看到的内容,我可能会提供帮助。


<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,标签为空。这能完成您想要的吗?

最后,我使用了一段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的hide()函数扫描所有项目以及以前缀D |开头的每个项目。这样,组合框的作用是,所有值都有效/启用,但用户将无法选择非活动值,因为它们不可见。此外,如果默认选择的值是以D |开头的值之一,该值仍将显示为默认值,但用户无法在他/她可以选择的选项列表中看到它。

对于记录,如果使用JSF 2.0,f:selectItem和f:selectItems具有“itemDisabled”属性生成所需的行为。

他想使某些项不可选择。其思想是我想要一个行为稍有修改的组合框。组合框的默认行为是让用户从项目列表中进行选择,如果最初没有选择
,则显示列表中的第一个项目。我的目的是要有一个组合框,它可以最初显示一个不在
列表中的项目(或以某种方式隐藏/不可见),并提交此值,只要用户不选择其他选项。不幸的是,这不是我要找的。实际上,我希望有可能将一个禁用的项目作为默认值,并在提交时将此值发送到服务器并填充到我的模型中(以防用户没有触摸到comobox)。您可以只添加要提交为f:selectItem的值吗?这样,如果未触摸selectOneMenu,则此值将是提交的值。