Jsf 我怎么能不打电话给setter<;f:viewparam>;转换器?

Jsf 我怎么能不打电话给setter<;f:viewparam>;转换器?,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我正在使用JSF2.1.1和PrimeFaces3.0.M4。我有一个用于发布国家评论的示例jsf页面。我使用带有转换器的f:viewparam标记来查看国家/地区页面。代码如下: country.xhtml: <f:metadata> <f:viewParam name="country" value="#{countryBean2.selectedCountry}" converter="countryConverter" required="true"/&

我正在使用JSF2.1.1和PrimeFaces3.0.M4。我有一个用于发布国家评论的示例jsf页面。我使用带有转换器的f:viewparam标记来查看国家/地区页面。代码如下:

country.xhtml:

<f:metadata>
        <f:viewParam name="country" value="#{countryBean2.selectedCountry}" converter="countryConverter" required="true"/>
    </f:metadata>

    <h:head>
        <title>Country</title>
    </h:head>

    <h:body>
        <h:form id="form">
            <h:outputText value="#{countryBean2.selectedCountry.countryName}" />
            <br/><br/>
            <h:outputText value="Comment:" />
            <h:inputText value="#{countryBean2.comment}" />
            <br/>
            <p:commandButton value="Send" action="#{countryBean2.sendComment}" update="@this" />
        </h:form>
    </h:body>
CountryConverter.java:

public class CountryConverter implements Converter {
    public static EntityCountry country = new EntityCountry();

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("testPU");


    @Override
    public EntityCountry getAsObject(FacesContext context, UIComponent component, String value) {
        EntityManager em = emf.createEntityManager();
        Query query = em.createQuery("SELECT c FROM EntityCountry c WHERE c.countryName = :countryName")
                .setParameter("countryName", value);
        country = (EntityCountry) query.getSingleResult();
        return country;
    }


    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        EntityCountry c = (EntityCountry) value;
        return c.getCountryName();
    }
}

当我使用commandbutton发布评论时,我想在不调用CountryConverter的情况下调用“setComment”setter。我该怎么做呢?

不幸的是,这是由
组件设计的。它将转换请求参数,并在每个HTTP请求以及回发上设置属性。为了改变这种行为,您需要使用一个自定义组件扩展
,该组件在其状态下不记得初始请求参数。它相对简单,不需要将
setSubmittedValue()
getSubmittedValue()
委托给
StateHelper
,只需要将其作为实例变量。这将在中详细描述


有一个随时可用的组件用于此。下面是。

不幸的是,这是由
组件设计的。它将转换请求参数,并在每个HTTP请求以及回发上设置属性。为了改变这种行为,您需要使用一个自定义组件扩展
,该组件在其状态下不记得初始请求参数。它相对简单,不需要将
setSubmittedValue()
getSubmittedValue()
委托给
StateHelper
,只需要将其作为实例变量。这将在中详细描述

有一个随时可用的组件用于此。这是你的电话号码

public class CountryConverter implements Converter {
    public static EntityCountry country = new EntityCountry();

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("testPU");


    @Override
    public EntityCountry getAsObject(FacesContext context, UIComponent component, String value) {
        EntityManager em = emf.createEntityManager();
        Query query = em.createQuery("SELECT c FROM EntityCountry c WHERE c.countryName = :countryName")
                .setParameter("countryName", value);
        country = (EntityCountry) query.getSingleResult();
        return country;
    }


    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        EntityCountry c = (EntityCountry) value;
        return c.getCountryName();
    }
}
@FacesComponent("com.my.UIStatelessViewParameter")
public class UIStatelessViewParameter extends UIViewParameter {

    private String submittedValue;

    @Override
    public void setSubmittedValue(Object submittedValue) {  
        this.submittedValue = (String) submittedValue;
    }

    @Override
    public String getSubmittedValue() { 
        return submittedValue;
    }   
}