Вопрос по primefaces, html, jsf-2, jsf – Как позволить JSF проходить через атрибуты HTML

6

Я использую Primefaces 3 в JSF 2, чтобы создать окно поиска. Мне нужно добавить нестандартный атрибут (x-webkit-speech) в элемент управления, чтобы у вас было что-то вроде этого ...

<code><p:autoComplete x-webkit-speech="x-webkit-speech" ... />
</code>

Поскольку этот атрибут не является частью элемента управления autoComplete, JSF выдает ошибку 500. Но когда я удаляю его, страница отображается нормально. В общем, как вы определяете сквозные атрибуты в теге JSF, чтобы они игнорировались?

Взгляни на этоstackoverflow.com/a/6675592/617373 Daniel

Ваш Ответ

3   ответа
0

возможно ли это вообще. Я бы добавил эти атрибуты на стороне клиента, используя javascript или jQuery.

Вы можете поместить выражения el в свой код javascript, если хотите интегрировать элементы на стороне сервера.

Error: User Rate Limit Exceeded
1

<html xmlns:h="http://java.sun.com/jsf/html" xmlns:e="http://java.sun.com/jsf/ext">
    <!-- ... -->
    <h:inputText id="name" value="#{bean.name}">
        <e:attribute name="placeholder" value="My Name"/>
    </h:inputText>
    <!-- ... -->
</html>

Вы можете настроить его через Maven:

<dependency>
    <groupId>com.intersult</groupId>
    <artifactId>jsf-ext</artifactId>
    <version>2.2.0.1</version>
</dependency>

JSF-Ext это библиотека изhttp://www.intersult.com/wiki/page/JSF%20Ext

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
7

деринге HTML. Вам нужен пользовательский рендер. Это в случае с PrimeFaces<p:autoComplete> (и все остальные компоненты), к счастью, относительно просты. Достаточно переопределить толькоrenderPassThruAttributes() метод, в котором вы добавляете новый атрибут, который вы хотите визуализировать вattrs аргумент и, наконец, делегировать супер метод.

Например.

package com.example;

import java.io.IOException;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.primefaces.component.autocomplete.AutoCompleteRenderer;

public class MyAutoCompleteRenderer extends AutoCompleteRenderer {

    @Override
    protected void renderPassThruAttributes(FacesContext facesContext, UIComponent component, String[] attrs) throws IOException {
        String[] newAttrs = new String[attrs.length + 1];
        System.arraycopy(attrs, 0, newAttrs, 0, attrs.length);
        newAttrs[attrs.length] = "x-webkit-speech";
        super.renderPassThruAttributes(facesContext, component, newAttrs);
    }

}

Чтобы запустить его, зарегистрируйте его в своем веб-приложении следующим образом.faces-config.xml:

<render-kit>
    <renderer>
        <component-family>org.primefaces.component</component-family>
        <renderer-type>org.primefaces.component.AutoCompleteRenderer</renderer-type>
        <renderer-class>com.example.MyAutoCompleteRenderer</renderer-class>
    </renderer>
</render-kit>

(you can find out the component family and renderer type by looking at the source code of AutoComplete class, they're specified as COMPONENT_FAMILY and RENDERER_TYPE constants in there)

Нет,@FacesRenderer аннотация просто не будет работать, если целью является переопределение пользовательских средств визуализации, которые сами по себе уже зарегистрированы вfaces-config.xml.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Adam
Error: User Rate Limit ExceededAutoCompleteError: User Rate Limit ExceededgetRendererType()Error: User Rate Limit Exceededcom.example.MyAutoCompleteRendererError: User Rate Limit Exceeded.taglib.xmlError: User Rate Limit Exceeded<renderer-type>Error: User Rate Limit Exceeded<my:autoComplete>.

Похожие вопросы