Композитный компонент в JSF 1.1 с Facelets 1.1 [duplicate]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

6
задан Mario Kutlev 24 January 2014 в 12:56
поделиться

1 ответ

В Facelets 1.x вы можете создать файл тега для этой цели.

Вот пример основного запуска. Создать /WEB-INF/tags/some.xhtml:

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <h:outputText value="#{foo}" />
</ui:composition>

Определить его в /WEB-INF/my.taglib.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
    "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
    "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">

<facelet-taglib>
    <namespace>http://example.com/jsf/facelets</namespace>
    <tag>
        <tag-name>some</tag-name>
        <source>/WEB-INF/tags/some.xhtml</source>
    </tag>
</facelet-taglib>

Зарегистрировать его в /WEB-INF/web.xml:

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>

(обратите внимание, что когда у вас есть несколько, используйте точку с запятой ;, чтобы отделить их)

Наконец, просто объявите его в шаблонах главной страницы.

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:my="http://example.com/jsf/facelets"
>
    <my:some foo="value1" />
    <my:some foo="value2" />
    <my:some foo="value3" />
</ui:composition>

Более подробный пример можно найти здесь: Как создать сетку составного компонента JSF? Примечание: JSF 2.0 нацелен, но с незначительными изменениями, основанными на приведенном выше примере, он отлично работает на Facelets 1.x.

4
ответ дан Community 24 August 2018 в 08:17
поделиться
Другие вопросы по тегам:

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