如果手动输入,则自动完成不发送正确的转换器值

时间:2011-05-10 05:04:15

标签: jsf jsf-2 primefaces

以下是一些要点:

  1. 我有一个primefaces自动完成示例,它使用带有自定义转换器的POJO。
  2. 我为转换器中的getAsString返回一个UUID字符串。
  3. 如果我通过键盘或鼠标点击从自动完成下拉菜单中选择值,则转换器的字符串值会正常发送。
  4. 但是当我自己键入值而不从自动完成下拉菜单中选择,或者只是将值粘贴到文本字段中时,验证错误:值是必需的。错误会发生。
  5. 我注意到发生此错误是因为发送到服务器端的值不是我的转换器生成的字符串,而是键入了自己的值。

  6. 使用firebug显示了这一点。

    这是当我从自动完成下拉对话框中选择值时,通过键盘或鼠标点击,我们可以注意到该值是UUID格式,由我的pojo转换器返回:

    <input aria-haspopup="true" aria-autocomplete="list" role="textbox" 
      autocomplete="off" id="DetailDialogForm:Bagian_input" 
      name="DetailDialogForm:Bagian_input" value="PERSO" 
      class="ui-inputfield ui-widget ui-state-default ui-corner-all ui-autocomplete-input" 
      type="text">
    <input id="DetailDialogForm:Bagian_hinput" 
      name="DetailDialogForm:Bagian_hinput" 
      value="b0019ab2-28c3-451a-90f6-62a6941ffcaa" type="hidden">
    

    这是当我键入或粘贴该值时,我们可以注意到该值正是我输入的值,这是我的pojo转换器不返回的:

    <input aria-haspopup="true" aria-autocomplete="list" 
      role="textbox" autocomplete="off" id="DetailDialogForm:Bagian_input" 
      name="DetailDialogForm:Bagian_input" value="PERSO" 
      class="ui-inputfield ui-widget ui-state-default ui-corner-all ui-autocomplete-input" 
      type="text">
    <input id="DetailDialogForm:Bagian_hinput" 
      name="DetailDialogForm:Bagian_hinput" value="PERSO" type="hidden">
    

    这是此元素的预期行为吗?


    我正在使用tomcat 7,这些是我的依赖项:

    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.0.4-b09</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.0.4-b09</version>
        <scope>compile</scope>
    </dependency>
    

    请分享您的想法,谢谢!


    更新


    这是JSF的摘录:

    <p:autoComplete id="Bagian" label="Bagian yang di limpahkan"
        value="#{tInputBean.activeDetail.map['department']}"
        completeMethod="#{tInputBean.filterDepartment}" var="department"
        itemLabel="#{department.map['departmentName']}"
        itemValue="#{department}" converter="genericConverter"
        forceSelection="true" required="true" />
    

    转换器可在this page处获得,在BalusC的EntityConverter答案中


1 个答案:

答案 0 :(得分:0)

你会发布你的.xhtml,我需要查看&lt; p:autoComplete /&gt;

请检查:

  1. 您是否添加了&lt; p:autoComplete&gt;属性forceSelection
  2. 当用户选择autoComplete给出的建议列表时,应该使用selectListener,并使用onSelectUpdate更新部分视图

  3. 检查是否有&lt; p:ajax /&gt;在&lt; p:autoComplete /&gt;内部,尝试将其删除