Jsf 我怎么能不打电话给setter<;f:viewparam>;转换器?
我正在使用JSF2.1.1和PrimeFaces3.0.M4。我有一个用于发布国家评论的示例jsf页面。我使用带有转换器的f:viewparam标记来查看国家/地区页面。代码如下: country.xhtml: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"/&
<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;
}
}