변환 및 유효성 검증 후 GET 매개 변수를 해당 관리 Bean에 설정하는 JSF 페이지에 <f:viewParam>
태그가 있습니다.<f:viewParam>의 유효성/변환 오류가 <f : view locale>에 있지만 기본 로케일로 변환되지 않습니다.
변환 또는 유효성 검사 오류가 발생하면 적절한 오류 메시지가 리소스 번들에서 반입되고 <p:messages>
(<p:growl>
또는 <h:messages>
일 수 있음)에 표시됩니다.
응용 프로그램이 다국어입니다. 따라서 다른 언어를 선택하면 해당 언어로 메시지가 표시되어야하지만 기본 로케일 en
(영문)에 따라 항상 메시지가 표시됩니다.
Test.xhtml :
<!DOCTYPE html>
<html lang="#{localeBean.language}"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:view locale="#{localeBean.locale}">
<f:metadata>
<f:viewParam name="id" converter="#{myConverter}" />
</f:metadata>
<h:head>
<title>Test</title>
</h:head>
<h:body>
<h:messages />
</h:body>
</f:view>
</html>
컨버터 : <f:viewParam>
에서 메시지를 제외하고
@FacesConverter("myConverter")
public final class MyConverter implements Converter
{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value)
{
ResourceBundle bundle = context.getApplication()
.evaluateExpressionGet(context, "#{messages}", ResourceBundle.class);
String message = bundle.getString("id.conversion.error");
throw new ConverterException(
new FacesMessage(FacesMessage.SEVERITY_ERROR, message, null));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value)
{
throw new UnsupportedOperationException(); // Not relevant in this problem.
}
}
는 아무 문제가 없다. 다른 모든 종류의 메시지는 사용자가 선택한 언어로 표시됩니다.
<f:viewParam>
과 관련하여 특별한 것이 있습니까?
이 메소드는'evaluateExpressionGet (String expression)'을 볼 수 없습니다. 대신'publicT evaluateExpressionGet (FacesContext 컨텍스트, 문자열 표현식, 클래스 extends T> expectedType) 만 ELException'을 throw합니다. 거기 있니? –
Tiny
죄송합니다, 나는 (실제로는'org.omnifaces.util.Faces'에서 정적 가져 오기를 사용하고 있습니다.) 과도하게 단순화 된 예제를 게시했으며 메소드의 작업에 대한 힌트를 이해할 것이라고 잘못 가정했습니다. 나는 대답을 업데이트했다. – BalusC
보기 메타 데이터가 처리 될 때 외부 f : view 태그는 고려되지 않지만 이론적으로 f : view는 특별한 것이기 때문에 그러지 않아야합니다. 나에게 벌레 같아. – lu4242