Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @PostConstruct中的CDI参数_Java_Jsf 2_Ejb 3.0_Java Ee 6 - Fatal编程技术网

Java @PostConstruct中的CDI参数

Java @PostConstruct中的CDI参数,java,jsf-2,ejb-3.0,java-ee-6,Java,Jsf 2,Ejb 3.0,Java Ee 6,我认为我的问题与类似,但没有发现它起作用 <f:metadata> <f:viewParam id="id" name="id" value="#{detailsBean.id}"/> </f:metadata> 我无法记录id 当然,@ManagedProperty与CDI不兼容 *****更新***** 一些xhtml: <?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE com

我认为我的问题与类似,但没有发现它起作用

  <f:metadata>
  <f:viewParam id="id" name="id" value="#{detailsBean.id}"/>
 </f:metadata>
我无法记录id

当然,@ManagedProperty与CDI不兼容

*****更新*****

一些xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="../template.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:f="http://java.sun.com/jsf/core">

    <ui:define name="head">
        <f:metadata>               
            <f:viewParam name="paginator" value="#{contactsBean.contactsTablePaginator}"/>
            <f:viewParam name="rows" value="#{contactsBean.contactsTableRows}"/>
        </f:metadata>
    </ui:define>

    <ui:define name="content">
        <p:growl id="growl" showDetail="true"/>

        <p:panel id="contactsPanel" >

            <h:form id ="contactsForm">

                <p:dataTable id="contactsTable" value="#{contactsBean.contacts}" selection="#{detailsBean.detailsContact}" var="contacts" widgetVar="contactsTable"
                             selectionMode="single" rowSelectListener="#{contactsBean.rowSelect}" rowUnselectListener="#{contactsBean.rowUnSelect}"
                             onRowUnselectUpdate="detailsForm" onRowSelectUpdate="detailsForm"
                             paginator="#{contactsBean.contactsTablePaginator}" rows="#{contactsBean.contactsTableRows}" rowsPerPageTemplate="5,10,15,25,50,100"
                             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">

                    <f:facet name="header">                     
                        <p:outputPanel>
                            <h:outputText value="Search:" />
                            <p:inputText id="globalFilter" onkeyup="contactsTable.filter()"  style="width:150px" />                
                        </p:outputPanel>
                    </f:facet>

                    <p:column filterStyle="display:none"  filterBy="#{contacts.name}" headerText="Name" style="width:200px">
                        <h:outputText value="#{contacts.name}" />
                    </p:column>

                    <p:column filterStyle="display:none" filterBy="#{contacts.street}" headerText="Street" style="width:280px">
                        <h:outputText value="#{contacts.street}" />                     
                    </p:column>

                    <p:column filterStyle="display:none" filterBy="#{contacts.city}" headerText="City" style="width:150px">
                        <h:outputText value="#{contacts.city}" />
                    </p:column>

                    <p:column filterStyle="display:none" filterBy="#{contacts.state}" headerText="State" style="width:50px">
                        <h:outputText value="#{contacts.state}" />
                    </p:column>

                    <p:column filterStyle="display:none" filterBy="#{contacts.zip}" headerText="Zip" style="width:100px">
                        <h:outputText value="#{contacts.zip}" />
                    </p:column>

                    <p:column filterStyle="display:none" filterBy="#{contacts.country}" headerText="Country" style="width:150px">
                        <h:outputText value="#{contacts.country}" />
                    </p:column>

                    <p:column filterStyle="display:none" filterBy="#{contacts.sent}" headerText="Sent" style="width:50px">
                        <h:outputText value="#{contacts.sent}" />
                    </p:column>                 

                </p:dataTable>

                <p:ajaxStatus >

                    <f:facet name="start">
                        <h:graphicImage value="../resources/images/ajax-loader-bar.gif" />
                    </f:facet>

                    <f:facet name="complete">
                        <h:graphicImage value="../resources/images/ajax-loader-bar-still.gif" />
                    </f:facet>

                    <f:facet name="default">
                        <h:graphicImage value="../resources/images/ajax-loader-bar-still.gif" />
                    </f:facet>
                </p:ajaxStatus>
                <br />

                <p:commandLink value="View All" action="#{contactsBean.viewAll}"   /> &nbsp;
                <p:commandLink value="Default View" action="#{contactsBean.viewDefault}"  /> &nbsp;
                <p:commandLink value="Advanced Search" action="search?faces-redirect=true" />

                <br />           

            </h:form>

            <br />

        </p:panel>

        <br />
        <br />

        <h:form id="detailsForm">

            <p:panel id="detailsPanel" visible="#{detailsBean.visible}" >

                <h:panelGrid id="detailsPanelGrid" cellpadding="2" cellspacing="2" columns="3"   >

                    <h:outputText value="Name :" />
                    <p:inputText id="name" value="#{detailsBean.detailsContact.name}" style="width:400px" />
                    <p:message for="name" />

                    <h:outputText value="Email :" />
                    <p:inputText id="email" value="#{detailsBean.detailsContact.email}" style="width:400px" validatorMessage="Must be a valid email address. EX: test@test.com"  >
                        <f:validateRegex pattern="[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+"/>
                        <p:ajax event="blur" update="emailMsg" />
                    </p:inputText>
                    <p:message id="emailMsg" for="email" />

                    <h:outputText value="Street :" />
                    <p:inputText id="street" value="#{detailsBean.detailsContact.street}" style="width:400px" />
                    <p:message for="street" />

                    <h:outputText value="City :" />
                    <p:inputText id="city" value="#{detailsBean.detailsContact.city}" style="width:400px" />
                    <p:message for="city" />

                    <h:outputText value="State :" />
                    <p:inputText id="state" value="#{detailsBean.detailsContact.state}" style="width:400px" validatorMessage="Length is greater than 2" >
                        <f:validateLength maximum="2" />
                        <p:ajax event="blur" update="stateMsg" />
                    </p:inputText>
                    <p:message id="stateMsg" for="state" />

                    <h:outputText value="Country :" />
                    <p:inputText id="country" value="#{detailsBean.detailsContact.country}" style="width:400px" />
                    <p:message for="country" />

                    <h:outputText value="Phone :" />
                    <p:inputText id="phone" value="#{detailsBean.detailsContact.phone}" style="width:400px"/>
                    <p:message for="phone" />

                    <h:outputText value="Guests :" />
                    <p:inputText id="guests" value="#{detailsBean.detailsContact.guests}" style="width:400px"/>
                    <p:message for="guests" />

                    <h:outputText value="Arrival :" />
                    <p:calendar id="arrival" value="#{detailsBean.detailsContact.arrival}" showOn="button" />
                    <p:message for="arrival" />

                    <h:outputText value="Departure :" />
                    <p:calendar id="departure" value="#{detailsBean.detailsContact.departure}" showOn="button" />
                    <p:message for="departure" />

                    <h:outputText value="Message :" />
                    <p:inputTextarea id="message" effectDuration="30" style="width:400px;height:100px;" value="#{detailsBean.detailsContact.message}"  />
                    <p:message for="message" />

                    <h:outputText value="Departure :" />
                    <p:calendar id="inserted" value="#{detailsBean.detailsContact.inserted}" showOn="button"/>
                    <p:message for="inserted" />

                    <h:outputText value="Sent :" />
                    <h:selectBooleanCheckbox id="sent" value="#{detailsBean.detailsContact.sent}" />
                    <p:message for="sent" />
                    <br />

                </h:panelGrid>

                <p:commandButton value="Submit" action="#{detailsBean.updateContactDetails}"  update="contactsForm, growl, stateMsg" />
                <p:commandButton value="Close" action="#{detailsBean.handleClose}" update="contactsForm, detailsForm" />

            </p:panel>

        </h:form>

    </ui:define>

</ui:composition>
更重要的是:

@Named(value = "contactsBean")
@RequestScoped
public class ContactsBean {

    @Inject
    EditBean editBean;
    @EJB
    private ContactsFacade contactsEJB;
    private List<Contacts> contacts = new ArrayList<Contacts>();
    private boolean contactsTablePaginator = true;
    private int contactsTableRows = 10;
    private Contacts selectedContact = new Contacts();

    public ContactsBean() {
    }

    @PostConstruct
    public void onLoad() {

        updateContactsList();
    }

    public String viewDefault() {

        contactsTablePaginator = true;
        contactsTableRows = 10;
        return "index?faces-redirect=true&includeViewParams=true";
    }

    public String viewAll() {

        contactsTablePaginator = false;
        contactsTableRows = 100;
        return "index?faces-redirect=true&includeViewParams=true";
    }

    public void updateContactsList() {

        contacts.clear();
        contacts = contactsEJB.findAll();
    }

    public void rowSelect(SelectEvent event) {

        editBean.setVisible(true);
        editBean.setDetailsContact((Contacts) event.getObject());
    }

    public void rowUnSelect(UnselectEvent event) {

        editBean.setVisible(false);
        editBean.setDetailsContact(new Contacts());

    }
}
@Named(value=“contactsBean”)
@请求范围
公共类联系人Bean{
@注入
EditBean;
@EJB
私人联系人FACADE contactsEJB;
private List contacts=new ArrayList();
私有布尔contactsTablePaginator=true;
私人int ContactStablerRows=10;
私人联系人selectedContact=新联系人();
公共联系人Bean(){
}
@施工后
public void onLoad(){
updateContactsList();
}
公共字符串viewDefault(){
contactsTablePaginator=true;
ContactStablerRows=10;
返回“index?faces redirect=true&includeViewParams=true”;
}
公共字符串viewAll(){
contactsTablePaginator=false;
ContactStablerRows=100;
返回“index?faces redirect=true&includeViewParams=true”;
}
public void updateContactsList(){
contacts.clear();
contacts=contactsEJB.findAll();
}
公共无效行选择(选择事件事件){
setVisible(true);
setDetailsContact((Contacts)event.getObject());
}
公共无效行取消选择(取消选择事件){
setVisible(false);
setDetailsContact(新联系人());
}
}
输入文本框填充良好。但我一点击submit,它就说值为空。此代码与SessionScope完美配合

警告:/admin/index.xhtml@104109 value=“#{detailsBean.detailsContact.name}”:无法访问目标,“null”返回null javax.el.PropertyNotFoundException:/admin/index.xhtml@104109 value=“#{detailsBean.detailsContact.name}”:无法访问目标,“null”返回null


我可以看到,当我选择数据表时,它正在调用EditBean。然后,当我单击submit按钮时,它会再次调用它

生命周期不允许您的方法

首先,创建bean(构造函数)。之后,执行依赖项注入,然后是
@PostConstruct
方法,然后评估JSF文件。并且
viewParam
在该文件中。因此,您必须注册另一个侦听器,该侦听器在填充视图参数后被调用

我有一个针对
@RequestScope
bean的解决方案,但是如果bean的作用域更长(比如视图),那么这个方法将在每个请求(包括AJAX)之后执行,这可能是不需要的

对请求范围bean使用此选项:

<f:metadata>
   <f:viewParam id="id" name="id" value="#{detailsBean.id}"/>
   <f:event type="preRenderView" listener="#{detailsBean.onLoad}" />
</f:metadata>
我希望这对你有帮助


编辑:

您在这里使用了大量AJAX。此调用必须至少在
ViewScoped
bean中进行。查看范围类似于
RequestScope
,但需要相当长的时间才能离开页面


但是我还没有全部阅读,有很多代码,如果ViewScope没有帮助,那么也许您应该提供一小段有问题的代码,以便有机会发现并关注真正的问题。

我遇到了与您完全相同的问题,并通过使用外部上下文(包含GET参数)解决了它而不是
f:viewParam

@PostConstruct
方法中,只需使用以下内容获取参数

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

我相信@PostConstruct只会在bean初始化阶段被调用。因此,您的onLoad()方法可能没有被调用。相关:问题听起来像是有时值为null,有时不是,所以bean可能没有在需要时加载参数。谢谢。看来viewParams更适合SessionScoped bean?这很有趣,因为我的想法正好相反。我试图为每一页呈现一个新bean,而每一页都没有保留任何内容。我认为请求范围是最好的方法。我想不是。当我去更新detailsContact时,它仍然没有解决detailsContact为null的另一个问题。就像一按下提交按钮,就会创建一个新的详细信息联系人。我认为请求比那个长一点。@dham:我认为页面的最佳范围是请求或视图(当您使用AJAX时)。更长的范围是多余的。将事件侦听器与RequestScope一起使用是很好的。你的另一个问题是什么?我找不到解释。如果你能给我们看一些代码并描述它,那就太好了,因为我不懂。嗨,我会用这个问题更新我的帖子。我有一个datatable,然后我选择一行,这将带我到另一个页面。我使用请求范围来使用EJB填充inputText字段。我正在使用您向我展示的侦听器方法。这些字段填充得很好,但是当我提交更改时,我得到一个错误,即字段实际上为空。这很奇怪。即使不转到其他页面进行编辑,我也会遇到同样的问题。是否可以将ViewScope与命名注释一起使用?似乎不适合这样做。我猜我将不得不使用ManagedBean javax.faces注释。@dham我不知道,我总是在属性名中使用ManagedBean
<f:metadata>
   <f:viewParam id="id" name="id" value="#{detailsBean.id}"/>
   <f:event type="preRenderView" listener="#{detailsBean.onLoad}" />
</f:metadata>
#{detailsBean.onLoad()}
<f:metadata>
   <f:viewParam id="id" name="id" value="#{detailsBean.id}"/>
</f:metadata>
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();