当前位置: 首页 > 知识库问答 >
问题:

在编辑模式下选择一个菜单默认值

曾嘉瑞
2023-03-14

我有一个可编辑的datatable,包含列“Datatype”。编辑此列时,使用SelectOne菜单选择值“字符串”、“数字”或“日期”。当我进入编辑模式时,“Datatype”列被设置为“String”(数据类型列表的第一项),但我希望它是该列的当前值(就像在Primefaces showcase中:单击——例如,如果我单击第二个表的第一行和第三列,则应选择“Fiat”,而不是selectOneMenu中的第一项——“BMW”——就像我的情况一样)。

我的代码有什么问题?

xhtml:

<p:column headerText="Type" >
        <p:cellEditor>
                <f:facet name="output">
                        <h:outputText value="#{item.dataType.code}" />
                </f:facet>
                <f:facet name="input">
                        <p:selectOneMenu value="#{item.dataType}" converter="myConverter" >
                              <f:selectItems value="#{backingBean.dataTypeList}" var="dt" itemLabel="#{dt.code}" itemValue="#{dt}" />
                        </p:selectOneMenu>
                </f:facet>
        </p:cellEditor>
</p:column>

数据类型类:

public class DataType implements Serializable {

    private BigDecimal id;
    private String code;
    private String descr;

    // Getters+Setters.
}

使用Primefaces 5.1。

我可以提供所需的任何其他信息。

共有1个答案

谭修竹
2023-03-14

如果由myConverter标识的转换器实现正确地执行其工作,那么如果所讨论的实体数据类型没有正确地实现equals()(和hashCode())。

只需在实体中添加/自动生成它们。至少应该是这样的:

@Override
public int hashCode() {
    return (id != null) 
        ? (getClass().hashCode() + id.hashCode())
        : super.hashCode();
}

@Override
public boolean equals(Object other) {
    return (other != null && getClass() == other.getClass() && id != null)
        ? id.equals(((DataType) other).id)
        : (other == this);
}

这还应该立即解决提交表单时出现的“验证错误:值无效”错误。

所有实体都应该实现它们。为了避免重复boileplate,请考虑创建一个基本实体,所有实体都从该实体扩展而来。请参见为具有Java泛型的实体实现转换器。

 类似资料:
  • 我正在编写一个python脚本,它将调用一个网页,并从下拉列表中选择一个选项来下载该文件。为了完成这个任务,我使用chropath。它是一个浏览器扩展,可以为您提供网页上任何按钮或字段的相对xpath或id,我们可以使用它从python脚本调用它。 上图显示了下拉菜单,其中我必须选择作为年份并下载文件。在图像的下部,您可以看到我使用了来获取下拉菜单的相对xpath,即 下面是我使用的代码: 从上面

  • 问题内容: 我有一些单选按钮,我希望其中的一个按钮在页面加载时默认设置为选中状态。我怎样才能做到这一点? 问题答案: XHTML解决方案: 请注意,属性的实际值并不重要。这只是分配的约定。最重要的是,字符串喜欢或没有任何特殊含义。 如果您不希望符合XHTML,则可以将代码简化为:

  • 我正在将一个对象传递给我的Angular组件,并试图在下拉列表呈现时使下拉列表显示已经选择的值。在我当前的代码中,下拉列表只显示第一个选项。我传入了第二个下拉选项的值。 在我的ts代码中,Object.Reason.code是一个值为“ex2”的字符串 下拉列表绑定到 这是我的html 所需的行为,如果Object.Reason.Code为undefind else如果字符串为EX2,下拉列表将显

  • CtrlD在sublime中执行命令。这基本上是搜索已经选择的文本的下一个匹配项并选择它,所以当我编辑时,它会同时在两个地方进行编辑。我目前正在尝试移动到IDEA编辑器(如Web斯托m、PHP斯托m、PyCharm等),但在这个IDE中还没有找到类似的命令。

  • 问题内容: 我试图使用AngularJS创建一个链接/级联的下拉列表(选择元素),但是我很难用我的对象属性过滤和更新“ selected”属性。 首次加载页面时,所选项目将被过滤并正确显示在下拉菜单中。更改父级下拉菜单后,子级选择项不会抓住已过滤列表中的第一个项,导致子级下拉项不会更新。 任何见解将不胜感激,请注意,我将父/子/孙子数组分开(而不是在子数组中),因为最终我将从SQL中的单独spoc

  • 我是使用selenium ide的新手。 我已经让我的代码的所有其他部分工作。 但是我目前有一个问题,让它在下拉菜单中选择一个选项。 我为下拉列表和