Проблема с красивыми лицами при использовании с конвертером viewparam
Я использую jsf 2.1, prettyfaces 3.3.3 и hibernate jpa 3.6.7. У меня есть страница страны, и я пытаюсь отправить комментарий с помощью кнопки.
country.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<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/>
<h:commandButton value="Send" action="#{countryBean2.sendComment}" />
</h:form>
</h:body>
</html>
countryConverter:
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();
}
довольно-config.xml:
<pretty-config xmlns="http://ocpsoft.com/prettyfaces/3.3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ocpsoft.com/prettyfaces/3.3.0
http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-3.3.0.xsd">
<url-mapping id="home">
<pattern value="/" />
<view-id value="/faces/index.xhtml" />
</url-mapping>
<url-mapping id="country">
<pattern value="/country/#{country}" />
<view-id value="/faces/country.xhtml" />
</url-mapping>
</pretty-config>
Конфигурация конвертера в face-config.xml:
<converter>
<converter-id>countryConverter</converter-id>
<converter-for-class>test.EntityCountry</converter-for-class>
<converter-class>test.CountryConverter</converter-class>
</converter>
когда я сначала открываю страницу localhost:8080/test/country/england, все работает хорошо. но когда я пытаюсь отправить комментарий через командную кнопку, метод getAsObject страны Converter снова вызывает неправильный строковый параметр (например, "test.CountryBean@bd9eff"), и сущность не может быть найдена.
Когда я использую уродливый URL-адрес по умолчанию (например, localhost: 8080 / test / Faces/country.xhtml?country=england) и пытаюсь отправить комментарий, метод getAsObject countryConverter вызывает истинный строковый параметр, и я могу успешно отправить комментарий. я думаю, что это ошибка prettyfaces, но я хочу использовать красивые URL.
2 ответа
У меня есть другой управляемый компонент, названный с помощью "country", и у меня есть значение шаблона с именем "country" в pretty-config.xml.
@Named("country")
@SessionScoped
public class CountryBean implements Serializable {
.......
}
когда я изменяю значение @Named("country"), оно успешно работает.
Не могли бы вы, возможно, попытаться зарегистрировать свой конвертер для EntityCountry
тип. Если вы используете faces-config.xml
для конфигурации используйте что-то вроде этого:
<converter>
<converter-for-class>com.myapp.EntityCountry</converter-for-class>
<converter-class>com.myapp.CountryConverter</converter-class>
</converter>
Из документации PrettyFaces:
Обратите внимание, что PrettyFaces автоматически использует преобразователь JSF, зарегистрированный для типа указанного свойства бина, для преобразования параметра пути. Это означает, что PrettyFaces поддерживает все стандартные конвертеры и конвертеры JSF, которые были зарегистрированы вручную для использования для определенного типа с помощью элемента converter-for-class в файле face-config.xml (или атрибута forClass аннотации @FacesConverter).
Если это не работает, пожалуйста, откройте тему на форумах поддержки OcpSoft:
Надеюсь, это поможет.:)