【问题标题】:Changing assigned user using p:selectOneMenu使用 p:selectOneMenu 更改分配的用户
【发布时间】:2017-01-13 01:58:14
【问题描述】:

我一直在寻找类似的问题,但我找不到任何问题。 所以事情就是这样

我正在尝试创建一个处理 HR 事务的 Web 应用程序,例如员工请求(辞职、贷款、休假等) 我正在使用 primeface,但有以下我无法弄清楚的问题。

我想做的是:

1- 当用户首次创建请求并分配用户并提交表单时 下一步是

2- 经理会看到请求,然后使用数据表中的下拉菜单将“负责请求的人员”更改为新的,我一直在尝试解决这个问题,但没有运气。 这是对话脚本

<h:form id='resignf'>
<p:dialog id='res' header="Resign Request" widgetVar="resign" minHeight="40">
        <p:outputLabel value="Employee name" /> 
        <p:inputText value="#{controller.resignName}" required="true" requiredMessage="This field is required" />

        <p:outputLabel value="Employee Number" /> 
        <p:inputText value="#{controller.resignEmployeNum}" required="true" />

        <p:inputText value="#{controller.resignNationalIDNum}" required="true"  />

        <p:inputText value="#{controller.resignNotes}" required="true"  />

        <p:outputLabel for="AssignUser" value="User" /> 

        <p:selectOneMenu id="AssignUser"  value="#{controller.assignUser}" style="width:150px" converter="UConverter">
            <f:selectItems value="#{controller.usersList}"  var="user" itemLabel="#{user.username}"/>
        </p:selectOneMenu >


        <p:commandButton action="#{controller.createResignRequest()}" onclick="PF('resign').hide();" update="@all"/>
    </p:dialog>

而代码是我下面的controller.java文件在表中创建请求

/* Request to resign*/
private List<ResignationRequest> resignList;
private ResignationRequestController rController = new ResignationRequestController();

private String resignName;
private String resignEmployeNum;
private String resignNationalIDNum;
private String ResignNotes;
private int AutoAssignToIDNUM;

/* end of request to resign*/

    public void createResignRequest() {

    System.out.println("createResignRequest");
    ResignationRequest newResign = new ResignationRequest();

    newResign.setName(resignName);
    newResign.setEmployeeNum(resignEmployeNum);
    newResign.setNationalID(resignNationalIDNum);

    newResign.setNotes(ResignNotes);

    newResign.setUserID(AssignUser);

    rController.create(newResign);
    resignList = rController.findResignationRequestEntities(); //retrieves all the resigns from the database

}

现在一切正常,但是当我在这里尝试用新用户更改旧用户时,我感到困惑!到目前为止,我一直在想的是我需要找到旧用户然后切换他,但我想不出使用选择列表的方法。下面是用于更改“对请求负责的用户”的脚本

<p:dataTable id="resignTable1" cellSeparator="true" editMode="cell" editable="true"  var="resign" value="#{controller.resignList}" paginator="true"    rows="10" rowIndexVar="index1">
    <p:ajax id="aj" event="cellEdit" listener="#{controller.editUser(user)}" update="resignTable1"/>
    <p:column headerText="Employee number">
        <p:cellEditor>
            <f:facet name="output"> <h:outputText value="#{resign.employeeNum}" /></f:facet>
            <f:facet name="input"> <h:inputText value="#{resign.employeeNum}" /></f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="name">
        <p:cellEditor>
            <f:facet name="output"> <h:outputText value="#{resign.name}" /></f:facet>
            <f:facet name="input"> <h:inputText value="#{resign.name}" /></f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Request Number">
        <p:cellEditor>
            <f:facet name="output"> <h:outputText value="#{resign.id}" /></f:facet>
            <f:facet name="input"> <h:inputText value="#{resign.id}" /></f:facet>

        </p:cellEditor>
    </p:column>
    <p:column headerText="User responsible for the request">
        <p:cellEditor>
            <f:facet name="output"> <h:outputText value="#{resign.userID}" /></f:facet>
            <f:facet name="input"> <h:inputText value="#{resign.userID}" /></f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Comments">
        <p:cellEditor>
            <f:facet name="output"> <h:outputText value="#{resign.notes}" /></f:facet>
            <f:facet name="input"> <h:inputText value="#{resign.notes}" /></f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Send the request to the next employee">
        <p:selectOneMenu id="AssignUser"  value="#{controller.assignUser}" style="width:150px" converter="UConverter" onchange="submit();">
            <f:selectItems value="#{controller.usersList}"  var="user" itemLabel="#{user.username}"   actionListener="#{controller.editRequestStep(resign)}"  >
            </f:selectItems>
        </p:selectOneMenu >

在我的控制器文件中

public void editRequestStep(ResignationRequest r) {

    System.out.println("Edit resign");

    try {
        System.out.println("Edit resign");
        rController.edit(r);

    } catch (Exception ex) {
        Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
    }

}

我试图从代码中获得尽可能多的信息,但我有很多东西我不确定是否应该提交。我试过ajax

注意:我正在使用 mySQL、apache tomcat 以防万一。

【问题讨论】:

  • 显然没有相同的问题,因为它是具体的。将您的问题分解为可管理的部分。你能从客户端获取正确的数据到服务器吗?如果没有,则不涉及 MySQL,如果可以,则不涉及 jsf/primefaces。 jquery 完全不涉及,java-se 也不涉及。我删除了这些,但请阅读 How to Askminimal reproducible example 来改进您的问题
  • @Kukeltje 实际上我的问题不是获取数据,我实际上是在使用 sql。关于 primeface 的事情是我需要使用下拉菜单更改“ResignRequest 表”中的用户 ID,但我不能。就是这样。
  • “仅此而已”,到底是什么?您永远不会直接从下拉列表(客户端)获取数据到数据库表中。JSF 负责将数据从客户端获取到网络服务器,将数据从网络服务器获取到数据库是不同的代码。你发布了一个对话,所以你可以让它在没有对话的情况下工作?如果没有,请将其从示例中删除。你能在没有数据表的情况下让它工作吗?如果没有,请将其从示例中删除。
  • 您的问题与 java-se 无关。您无法使用仅包含 main 方法和基本 java j.l.s 类的代码来重现这一点
  • 为什么在“onchange”中有一个“submit()”?它有什么作用?也许阅读stackoverflow.com/questions/3681123/… 会有所帮助。还有一个selectItems上的actionListener???我认为你应该从开发中退后一步,阅读关于 JSF 的优秀基础教程

标签: java jsf-2 primefaces


【解决方案1】:

解决了。

public void editRequestStep(ResignationRequest r) {

    System.out.println("Edit resign " + EditAssignUser +"   this is userthig" + r.getName());

    try {
        System.out.println("Edit resign");
        r.setUserID(EditAssignUser);

    } catch (Exception ex) {
        Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
    }

}


<p:selectOneMenu id="AssignUser"  value="#{controller.editAssignUser}" style="width:150px" converter="UConverter"> 
                                <p:ajax listener="#{controller.editRequestStep(resign)}" update="@all"/>
                                <f:selectItems value="#{controller.usersList}"  var="user" itemLabel="#{user.username}" >



                                    </f:selectItems>

我没有注意到我使用了变量 assignUser 2 次,这实际上错过了我。所以我所做的是我创建了名为“editAssignUser”的新用户变量,然后在我的控制器中我只是设置用户查看下面的代码

    public void editRequestStep(ResignationRequest r) {

    System.out.println("Edit resign " + EditAssignUser +"   this is userthig" + r.getName());

    try {
        System.out.println("Edit resign");
        r.setUserID(EditAssignUser);

    } catch (Exception ex) {
        Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
    }

}

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多