javascript - JSF Richfaces 自动完成问题 - 使用..anything 发送隐藏参数

标签 javascript ajax spring jsf richfaces

我想做什么来创建一个自动完成输入文本,但是提交表单时我想设置一个 id 或一个员工对象,而不是从输入字段获取字符串。有人可以帮忙吗..我如何使用隐藏输入字段或 javascript/ajax 函数来做到这一点。THX ..

<rich:autocomplete  mode="cachedAjax" tokens="," minChars="0"
            autoFill="true" selectFirst="true"
            autocompleteMethod="#{employeeBean.employeeSuggestions}" var="employee"
            fetchValue="#{employee.firstName} #{employee.lastName}">
             <h:inputHidden id="employeeId" value="#{employee.id}"/>
            <h:column >
                <h:outputText value="#{employee.firstName}" />
                <h:outputText value="&#160;" />
            </h:column>
            <h:column>
                <h:outputText value="#{employee.lastName}" />
            </h:column>
        </rich:autocomplete>
    </h:panelGrid>

    <h:panelGrid columns="3" cellspacing="5">
        <h:commandButton value="#{messages.ok}"
            action="#{departmentBean.addOrUpdateDepartment}">
        </h:commandButton>
        <h:commandButton action="department" value="#{messages.close}"
            immediate="true" />
    </h:panelGrid>

我愿意接受任何建议。

最佳答案

我也有同样的情况。我得出的最终答案是使用 jsFunction,并结合支持 bean 中的操作方法。

首先,ID 值将被短暂提取到自动完成字段中。调用 onselectitem JS 函数。 jsFunction 的execute 属性确保在调用我的populateEmployee 操作之前将获取的ID 值绑定(bind)到支持bean 字段中。 populateEmployee 转身,将字段中的 ID 值移动到我想要的任何位置,并将自动完成字段的值替换为我最终想要显示的内容(在本例中为名称)。然后重新呈现名称自动完成字段。

根据您的后端系统进行员工 ID 到姓名查找的速度,基础 ID 将显示一小会,同时运行您的 populateEmployee 的等效项。但这是我能得到的最接近可接受的(就我而言)工作解决方案的结果。

JSF:

<a4j:jsFunction name="chooseEmployee" execute="employeeSearchName" action="#{employeeSearchBean.populateEmployee}" render="selectedEmployeeId employeeSearchName"/>
<rich:autocomplete id="employeeSearchName" mode="ajax" minChars="3"
                   autocompleteMethod="#{employeeSearchBean.searchEmployees}" var="emp"
                   autofill="false" layout="table"
                   fetchValue="#{emp.employee.id}" value="#{employeeSearchBean.selectedEmployeeName}"
                   onselectitem="chooseEmployee()">
... output columns ...
</rich:autocomplete>
<h:outputText id="selectedEmployeeId" value="#{employeeSearchBean.selectedEmployeeId}"/>

支持 bean :

private String selectedEmployeeName;
private Integer selectedEmployeeId;

public void populateEmployee() {
  selectedEmployeeId = Integer.parseInt(selectedEmployeeName);
  for (EmployeeSearchEntry entry : data) {
    if (entry.getEmployee().getId().equals(selectedEmployeeId)) {
      selectedEmployeeName = entry.getNameLfm();
      break;
    }
  }
}

关于javascript - JSF Richfaces 自动完成问题 - 使用..anything 发送隐藏参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6759742/

相关文章:

javascript - 为什么 Meteor Router 函数总是运行两次

javascript - 如何解压 xxx.js.tar 文件

javascript - 从 firebase 检索分割数据

php - 使用 PHP 扫描目录并在 JavaScript 中使用结果

jquery - 在当前弹出窗口中显示错误消息(从数据库获取记录)

javascript - 使用ajax在页面加载时提交表单输入值

javascript - 将数组从 php 传递到 ajax 时,JSON 中位置 0 出现意外标记 C

java - 如何使用 Spring RestTemplate 在 POST 中传递数组?

javascript - 为什么提交到Spring Controller 后java无法识别html文本?

spring - Spring Security使用bcrypt算法编码密码