可编辑的p:数据表

时间:2016-09-08 07:17:46

标签: spring hibernate jsf primefaces

我是Java新手,现在正在努力学习。 我需要在数据表中更新,由 addInventory 方法手动添加的数据,女巫正在工作。我有一个"编辑"按钮,但不起作用。这是错误:

javax.el.ELException: org.springframework.dao.InvalidDataAccessApiUsageException: Bean object must not be null; nested exception is java.lang.IllegalArgumentException: Bean object must not be null
    at org.apache.el.parser.AstValue.invoke(AstValue.java:260) ~[tomcat-embed-el-8.0.32.jar!/:8.0.32]
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267) ~[tomcat-embed-el-8.0.32.jar!/:8.0.32]
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at javax.faces.component.UIData.broadcast(UIData.java:1108) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) ~[javax.faces-2.2.11.jar!/:2.2.11]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [javax.faces-2.2.11.jar!/:2.2.11]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) [javax.faces-2.2.11.jar!/:2.2.11]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:654) [javax.faces-2.2.11.jar!/:2.2.11]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) [tomcat-embed-core-8.0.32.jar!/:8.0.32]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [tomcat-embed-core-8.0.32.jar!/:8.0.32]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.0.32.jar!/:8.0.32]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [tomcat-embed-core-8.0.32.jar!/:8.0.32]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [tomcat-embed-core-8.0.32.jar!/:8.0.32].

服务代码是:

@Service
public class InventoryService implements IInventoryService{

    @Autowired
    private InventoryDao inventoryDAO;

List<InventoryDTO> inventoryDTOs = new ArrayList<InventoryDTO>();

@Override
public List<Inventory> getInventories() {
    return (List<Inventory>) inventoryDAO.findAll();
}


public Inventory getInventories(long id) {
    return inventoryDAO.findOne(id);
}

public Inventory getInventory(long id) {
    Inventory inventory = inventoryDAO.findOne(id);
    if (inventory == null)
        return null;

    return inventory.convertToDTO().convertToEntity();
}

@Override
public Inventory addInventory(Inventory inventory) {
    return inventoryDAO.save(inventory);
}

@Override
public Inventory updateInventory(Inventory inventory) {
    return inventoryDAO.save(inventory);
}

这是控制器视图:

@Component("invController")
@Scope(FacesViewScope.NAME)
@Getter
@Setter
public class InvController implements Serializable {
private static final long serialVersionUID = 1L;

private boolean canEdit;

private List<Inventory> inventories = new ArrayList<>();

@Autowired
private InventoryService inventoryService;
private InventoryDTO inventoryDTO = new InventoryDTO();

@PostConstruct
public void initInventories() {
    inventories = inventoryService.getInventories();
}

public void setInventoryDTO(InventoryDTO inventoryDTO) {
    this.inventoryDTO = inventoryDTO;
}

public void addInventory() {
    if (!inventories.add(inventoryService.addInventory(inventoryDTO.convertToEntity())))
        throw new IllegalArgumentException("Inventory could not be added to DB!");
}

public void updateInventory() {
    Inventory inventory = inventoryService.getInventory(inventoryDTO.convertToEntity().getId());
    inventoryService.updateInventory(inventory).convertToDTO();
    inventoryDTO = new InventoryDTO();
}

Here is the xhtml file: 

    

    <html>

<h:head>

    <!-- For Bootstrap responsive grid -->
    <link rel="stylesheet"
        href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" />

</h:head>

<ui:define name="content">
    <h:form id="form" style="height:725px">
        <center>
            <h3 class="hardblue" style="margin-top:50px">Inventar</h3>
        </center>
        <center>

            <p:tabView scrollable="true" style="width:75%; margin-top:100px">
                <p:tab title="Beneficiar">
                    <p:panelGrid style="width:500px" id="idPanel1" var="beneficiaries"
                                 editable="true" editMode="row">


                        <p:column headerText="Numar">Numar
                            <h:inputText value="#{invController.inventoryDTO.number}"
                                         disabled="#{!invController.canEdit}"
                                         style="font-weight:bold" />

                        </p:column>
                        <p:column headerText="Descriere">Descriere
                            <h:inputText value="#{invController.inventoryDTO.description}"
                                         disabled="#{!invController.canEdit}"
                                         style="font-weight:bold" />
                        </p:column>
                        <p:column headerText="Tipul de explozibil">Tip de explozibil
                            <h:inputText value="#{invController.inventoryDTO.types}"
                                         disabled="#{!invController.canEdit}"
                                         style="font-weight:bold" />
                        </p:column>
                    </p:panelGrid>

                </p:tab>
                <p:tab title="Locul de unde se ridica">
                    <p:dataTable>
                        <p:column headerText="Loc">
                            <h:outputText value="#{tableComplete.locRidicare}" />
                        </p:column>
                        <p:column headerText="Localitate">
                            <h:outputText value="#{tableComplete.locRidicareLoc}" />
                        </p:column>
                    </p:dataTable>
                </p:tab>.
            <p:tab title="Locul unde se transporta">
                    <p:dataTable>
                        <p:column headerText="Loc">
                            <h:outputText value="#{tableComplete.locDepunere}" />
                        </p:column>
                        <p:column headerText="Localitate">
                            <h:outputText value="#{tableComplete.locDepunereLoc}" />
                        </p:column>
                    </p:dataTable>
                </p:tab>
                <p:tab title="Vehicul Transport Marfa">
                    <p:dataTable>
                        <p:column headerText="Marca">
                            <h:outputText value="#{tableComplete.vehTrMarfaMarca}" />
                        </p:column>
                        <p:column headerText="Model">
                            <h:outputText value="#{tableComplete.vehTrMarfaModel}" />
                        </p:column>
                        <p:column headerText="Nr. Inmatriculare">
                            <h:outputText value="#{tableComplete.vehTrMarfaNI}" />
                        </p:column>
                        <p:column headerText="Numele Conducatorului">
                            <h:outputText value="#{tableComplete.vehTrMarfaC}" />
                        </p:column>
                        <p:column headerText="Act de Identitate al Conducatorului">
                            <h:outputText value="#{tableComplete.vehTrMarfaAIC}" />
                        </p:column>
                    </p:dataTable>
                </p:tab>
                <p:tab title="Vehicul Transport Paza">
                    <p:dataTable>
                        <p:column headerText="Marca">
                            <h:outputText value="#{tableComplete.vehTrPazaMarca}" />
                        </p:column>
                        <p:column headerText="Model">
                            <h:outputText value="#{tableComplete.vehTrPazaModel}" />
                        </p:column>
                        <p:column headerText="Nr. Inmatriculare">
                            <h:outputText value="#{tableComplete.vehTrPazaNI}" />
                        </p:column>
                        <p:column headerText="Numele Conducatorului">
                            <h:outputText value="#{tableComplete.vehTrPazaC}" />
                        </p:column>
                        <p:column headerText="Act de Identitate al Conducatorului">
                            <h:outputText value="#{tableComplete.vehTrPazaAIC}" />
                        </p:column>
                    </p:dataTable>
                </p:tab>
                <p:tab title="Artificier">
                    <p:panelGrid style="width:500px" id="idPanel2" var="pyrotechnists"
                                 editable="true" editMode="row">
                        <p:column headerText="numar">Numar
                            <h:inputText value="#{invController.inventoryDTO.number}"
                                         disabled="#{invController.canEdit}"
                                         style="font-weight:bold" />
                        </p:column>
                        <p:column headerText="Descriere">Descriere
                            <h:inputText value="#{invController.inventoryDTO.description}"
                                         disabled="#{invController.canEdit}"
                                         style="font-weight:bold" />
                        </p:column>
                        <p:column headerText="Act de Identitate">Act de identitate
                            <h:inputText value="#{invController.inventoryDTO.types}"
                                         disabled="#{invController.canEdit}"
                                         style="font-weight:bold" />
                        </p:column>
                    </p:panelGrid>

                    <p:commandButton value="Add Inventory" id="ajax" update="@form" actionListener="#{invController.addInventory}" styleClass="ui-priority-primary" />

                </p:tab>
                <p:tab title="Paza 1">
                    <p:dataTable>
                        <p:column headerText="Nume">
                            <h:outputText value="#{tableComplete.paza1Nume}" />
                        </p:column>
                        <p:column headerText="Prenume">
                            <h:outputText value="#{tableComplete.paza1Prenume}" />
                        </p:column>
                        <p:column headerText="Act de Identitate">
                            <h:outputText value="#{tableComplete.paza1AI}" />
                        </p:column>
                    </p:dataTable>
                </p:tab>
                <p:tab title="Paza 2">
                    <p:dataTable>
                        <p:column headerText="Nume">
                            <h:outputText value="#{tableComplete.paza2Nume}" />
                        </p:column>
                        <p:column headerText="Prenume">
                            <h:outputText value="#{tableComplete.paza2Prenume}" />
                        </p:column>
                        <p:column headerText="Act de Identitate">
                            <h:outputText value="#{tableComplete.paza2AI}" />
                        </p:column>
                    </p:dataTable>
                </p:tab>
                <p:tab title="Tipuri de Materii Explozive">
                    <p:dataTable>
                        <p:column headerText="Nr. N.U.">
                            <h:outputText value="#{tableComplete.tipENr}" />
                        </p:column>
                        <p:column headerText="C.I. Diviziune">
                            <h:outputText value="#{tableComplete.tipEDiv}" />
                        </p:column>
                        <p:column headerText="Denumire Comerciala">
                            <h:outputText value="#{tableComplete.tipEDC}" />
                        </p:column>
                        <p:column headerText="Marcaj C.E.">
                            <h:outputText value="#{tableComplete.tipEMarcaj}" />
                        </p:column>
                        <p:column headerText="Furnizor">
                            <h:outputText value="#{tableComplete.tipEFurnizor}" />
                        </p:column>
                        <p:column headerText="Cantitate">
                            <h:outputText value="#{tableComplete.tipECant}" />
                        </p:column>
                    </p:dataTable>
                </p:tab>
            </p:tabView>



        <p:dataTable paginator="true" scrollable="true" id="invList" value="#{invController.inventories}" ajax="true" var="inv" style="width:75%; margin-top:50px">
        <p:column>
            <f:facet name="header">
                <h:outputText value="Number" />
            </f:facet>
            <h:outputText value="#{inv.number}" />
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="Cui" />
            </f:facet>
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="Tipuri" />
            </f:facet>
            <h:outputText value="#{inv.types}" />
        </p:column>
        <p:column>
        <f:facet name="header">
            <h:outputText value="Edit" />
        </f:facet>
            <p:commandButton value="Edit" id="ajax2" update="invList" actionListener="#{invController.updateInventory()}" styleClass="ui-priority-primary" />
        </p:column>
        </p:dataTable>
        </center>
    </h:form>
</ui:define>
    </html>
</ui:composition>

1 个答案:

答案 0 :(得分:0)

我建议你一种方式 这是你写一个<h:inputText value="#{bean.value}" rendered="#{bean.flag}"/>,其中标志变量在bean <h:outputText>中是假的 然后编写一个jquery来单击表中的这个文本,这个标志变为true,h:outputText用false标志呈现。