Как заполнить таблицу данных простых лиц после поиска в базе данных - PullRequest
0 голосов
/ 06 февраля 2019

Я занимаюсь разработкой приложения и хочу отредактировать строку таблицы данных.Проблема, с которой я сталкиваюсь, заключается в том, что, если я заполняю свой метод ArrayList in getter, действие rowEdit не работает, но когда я заполняю список в методе @PostConstruct с @ViewScoped, работает rowEdit.Итак, теперь у меня есть поле для поиска значений из базы данных и отображения в таблице данных.Я не могу заполнить значения в таблице данных при создании managedbean, потому что для поиска мне нужно отправить значение поля в метод поиска, но в @postConstruct я не могу.ПОЖАЛУЙСТА, помогите мне.

Вот мой фрагмент кода:

<p:dataTable id="patients" rendered="#{viewBills.visible}"
                editable="true" value="#{viewBills.getPatientBills}" var="patient"
                style="margin-bottom:20px">

                <p:ajax event="rowEdit" Listener="#{viewBills.updateEdited}" update="@form"/>
                <p:ajax event="rowEditCancel" Listener="#{viewBills.onRowCancel}" update="@form"/>

                <p:column headerText="Name">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.patName}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText id="modelInput" value="#{patient.patName}"
                                style="width:100%" />
                        </f:facet>
                    </p:cellEditor>

                </p:column>
                <p:column headerText="Department">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.department}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.department}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Amount">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.amount}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.amount}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Implant">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.implant}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.implant}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Ceramic Lab">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.ceramicLab}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.ceramicLab}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Comments">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.comments}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.comments}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Practical Charges">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.practicalCharges}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.practicalCharges}"
                                style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Material Charges">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.materialCharges}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.materialCharges}"
                                style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Fixed Ortho">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.fixedOrtho}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.fixedOrtho}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="MF Kit">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.mfKit}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.mfKit}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Army No">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.armyNo}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.armyNo}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Unit">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.unit}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.unit}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Armed Forces">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{patient.armedForces}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{patient.armedForces}" style="width:100%" />
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Options" style="width:50px">
                    <p:rowEditor />
                </p:column>
            </p:dataTable>

А вот мой управляемый Бин

@ManagedBean(name = "viewBills")
@ViewScoped
public class ManageViewBIllsBean {

    public String mrNo;

    public boolean visible = false;

    public ArrayList<Patient> getPatientBills = new ArrayList<>();

    public ArrayList<Patient> getAllPatientBills = new ArrayList<>();

    public ArrayList<Patient> search() {
        getPatientBills = DatabaseHandler.searchBillByMrNo(mrNo);
        if (!getPatientBills.isEmpty()) {
            setVisible(true);
            return getPatientBills;
        } else {
            setVisible(false);
            return getPatientBills;
        }
    }

    @PostConstruct
    public void init() {
        getGetPatientBills();
        setVisible(true);
    }

    public ArrayList<Patient> searchAllBills() {
        return DatabaseHandler.searchAllBills();
    }

    public void executeViewAllBills() throws IOException {

        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();

        ec.redirect(ec.getRequestContextPath() + "/viewAllBills.xhtml");

    }

    public void executeViewBillsByMRNo() throws IOException {

        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();

        ec.redirect(ec.getRequestContextPath() + "/viewBillsByMRNo.xhtml");

    }

    public void updateEdited(RowEditEvent event) {
        System.out.println(" i am in edit");
        FacesMessage msg = new FacesMessage("Car Edited", ((Patient) event.getObject()).getPatName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowCancel(RowEditEvent event) {
        FacesMessage msg = new FacesMessage("Edit Cancelled", ((Patient) event.getObject()).getPatName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public String getMrNo() {
        return mrNo;
    }

    public void setMrNo(String mrNo) {
        this.mrNo = mrNo;
    }

    public ArrayList<Patient> getGetPatientBills() {
        return getPatientBills;
    }

    public ArrayList<Patient> getGetAllPatientBills() {
        return getAllPatientBills;
    }

    public boolean isVisible() {
        return visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
    }

}

1 Ответ

0 голосов
/ 11 февраля 2019

Мне кажется, я понял.У вас есть вход для вашего MR NO (число).И когда пользователь отправляет эти входные данные, вы хотите, чтобы ваши данные заполнялись данными, полученными из вашего запроса SQL.

Что вам нужно сделать, это использовать <p:commandButton> для отправки MRNO.Он должен вызвать метод, который запускает ваш запрос, и обновить ваш <p:dataTable> следующим образом:

<p:commandButton value="Submit MR NO" 
                 action="#{viewBills.loadPatientsFromDatabase}" 
                 update="patients" />

Итак, вам нужен правильный метод в вашем бине:

public void loadPatientsFromDatabase()
{
    getPatientBills = DatabaseHandler.searchBillByMrNo(mrNo);
    setVisible = getPatientBills.isEmpty() ? false : true;
}

следует сделать все возможное, чтобы ваш dataTable получил свои данные.

Однако в вашем коде, похоже, происходит много вещей, которые необходимо улучшить, например, присвоение имен.И вызов getGetPatientBills() в вашем init() ничего не делает.

...