Java JSF2:bean上的属性假定为写入而不是读取?

Java JSF2:bean上的属性假定为写入而不是读取?,java,jsf-2,views,request,javabeans,Java,Jsf 2,Views,Request,Javabeans,我有以下简单视图main.xhtml,请求URL类似于: http://localhost:8080/myproj/main.jsf?pq=2 <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:f="http://java.sun.com/jsf/core"

我有以下简单视图
main.xhtml
,请求URL类似于:

http://localhost:8080/myproj/main.jsf?pq=2

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich"
                template="/templating/layout-2col.xhtml">

  <ui:define name="metadata">
    <f:metadata>
      <f:viewParam name="pq" value="#{pqHome.id}" required="true">
        <f:convertNumber integerOnly="#{true}" />
      </f:viewParam>
      <f:event type="preRenderView" listener="#{pqHome.init}" />
    </f:metadata>
  </ui:define>

  ...

  <ui:define name="content-right">
    <h:form>
      <rich:panel>
        <f:facet name="header">
          Menu
        </f:facet>
        <rich:tabPanel binding="#{pqHome.tabPanel}">        
        </rich:tabPanel>
      </rich:panel>
    </h:form>
  </ui:define>

</ui:composition>
为什么JSF假设选项卡面板EL
binding=“#{pqHome.tabPanel}”
可以在这里写入/写入?有没有一种方法可以解决这个问题,那就是告诉JSF在这里阅读

注意:解决方法是取消对bean中的
@ManagedProperty
@PostConstruct
注释的注释,并在视图中对
进行注释,但是我不明白为什么要使用


谢谢

JSF只需要按照您通过
绑定所告诉它的那样,在支持bean中设置获得的或自动创建的非空组件。您需要提供一个setter方法。没有借口。如果getter返回一个手动创建的组件,那么只会设置相同的组件。JSF不会设置自动创建的一个。

我两个都用了吗?不是很抱歉。我正在使用一个或另一个,或者
+
(它不起作用/不起作用),因此我别无选择,只能使用
@ManagedProperty
+
@PostConstruct
(后面的注释没有注释!)。很抱歉,注释中的注释与IDE中的注释颜色相同,我的血液中的咖啡因不足,但被快速代码扫描误导了。我把纸条拿走了。我想是的。没问题。:-)只是需要一个二传手,嗯。。。谢谢
@ManagedBean
@RequestScoped
public class PqHome implements Serializable
{
    @Inject
    private PqService pqService;

    //@ManagedProperty(value="#{param.pq}")
    private Integer id;
    private Prequalification instance;

    @Inject
    private PqPartnerListQuery pplq;
    private List<Partner> partners;

    private UITabPanel tabPanel;
    private List<UIComponent> tabs;

    //@PostConstruct
    public void init()
    {
        System.out.println("ID is " + id);

        instance = pqService.findSingleInstance(id);

        partners = pplq.getItemsForPq(id);

        System.out.println("Building tab manually...");

        // RF way...
        FacesContext fc = FacesContext.getCurrentInstance();
        Application application = FacesContext.getCurrentInstance().getApplication();

        tabPanel = (UITabPanel)application.createComponent(UITabPanel.COMPONENT_TYPE);
        tabPanel.setSwitchType(SwitchType.client);

        tabs = tabPanel.getChildren();

        for ( Partner partner : partners )
        {
            Company co = partner.getCompany();
            String companyName = co.getName();

            UITab tab = (UITab)application.createComponent(UITab.COMPONENT_TYPE);

            //tab.setTitle(companyName);
            tab.setName(companyName);
            tab.setId(co.getDndType());

            tabs.add(tab);
        }

        String firstTabName = partners.get(0).getCompany().getName();

        System.out.println("First tab name = " + firstTabName);

        tabPanel.setActiveItem(firstTabName);
    }

    public Integer getId()
    {
        return id;
    }

    public void setId(Integer id)
    {
        this.id = id;
    }

    public Prequalification getInstance()
    {
        return instance;
    }

    public UITabPanel getTabPanel()
    {
        return tabPanel;
    }
}
An Error Occurred:
/main.xhtml @221,53 binding="#{pqHome.tabPanel}": The class 'de.mycomp.myproj.beans.PqHome' does not have a writable property 'tabPanel'.
+- Stack Trace

javax.el.PropertyNotWritableException: /main.xhtml @221,53 binding="#{pqHome.tabPanel}": The class 'de.mycomp.myproj.beans.PqHome' does not have a writable property 'tabPanel'.
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:136)
    at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1897)
    at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1109)
    at org.jboss.as.weld.webtier.jsf.ForwardingApplication.createComponent(ForwardingApplication.java:122)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.createComponent(ComponentTagHandlerDelegateImpl.java:511)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:157)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:55)
...
    at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57)
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:49)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)
    at java.lang.Thread.run(Unknown Source)