1

根据我阅读的内容,在 jsf 中,我可以使用替换资源包字符串中的参数

<h:outputFormat value="#{msg['message.param2']}"> 
   <f:param value="param0" /> 
   <f:param value="param1" /> 
</h:outputFormat> 

我的问题是我正在使用 primefaces 标签,我需要使用 的属性requiredMessageinputText类似于:

<p:inputText value="#{cteYDetalleMb.cteEnCaptura.nombreComercial}" style="width: 50em" required="true" 
             requiredMessage="#{msg['validacion.datosRequeridos']}" />

我的消息validacion.datosRequeridos是需要一个参数,而上面的示例是不同的。我该如何解决这个问题,我尝试使用<f:param>但它不起作用。

4

2 回答 2

1

您最好的选择是创建一个自定义 EL 函数,以便您最终可以如下所示:

<p:inputText ... requiredMessage="#{my:format(msg['validacion.datosRequeridos'], 'param0', 'param1')}" />

您还可以创建一个自定义 UI 组件,该组件扩展<h:outputFormat>和捕获输出并将其存储在 EL 范围内的变量中:

<my:outputFormat value="#{msg['message.param2']}" var="requiredMessage"> 
   <f:param value="param0" /> 
   <f:param value="param1" /> 
</my:outputFormat> 
<p:inputText ... requiredMessage="#{requiredMessage}" />

这两种方法都可以在 JSF 实用程序库OmniFaces中分别以of:format2()和的形式<o:outputFormat>提供。

于 2012-10-21T11:29:59.203 回答
0

不是最好的解决方案,但您可以使用以下行覆盖所有默认的必需消息:javax.faces.component.UIInput.REQUIRED = new required message。label:{0} 参数为 inputText 的 label 属性。

或者您可以创建一个 backingbean 方法。它从包中读取消息。

   <p:inputText value="#{cteYDetalleMb.cteEnCaptura.nombreComercial}" style="width: 50em" required="true" requiredMessage="#{controller.getRequiredMessage(param)}"/>

您可以使用这些辅助方法从控制器读取消息。

public static String getMessage(String key) {
        FacesContext fc = FacesContext.getCurrentInstance();
        String mb = fc.getApplication().getMessageBundle();
        ResourceBundle resourceBundle = ResourceBundle.getBundle(mb, fc.getViewRoot().getLocale());
        return resourceBundle.getString(key);
    }

    public static String getMessage(String key, String params[]) {
        MessageFormat messageFormat = new MessageFormat(getMessage(key), FacesContext.getCurrentInstance().getViewRoot().getLocale());
        return messageFormat.format(params);
    }
于 2012-10-21T09:43:30.107 回答