Гольф кода: кодируйте 39 штрихкодов

Существует три основные причины.

  1. FacesServlet не вызывается.
  2. Недопустимые URI пространства имен XML.
  3. Несколько JSF были загружены.

1. Убедитесь, что URL-адрес соответствует FacesServlet mapping

. URL-адрес ссылки (URL-адрес, который вы видите в адресной строке браузера) должен соответствовать файла FacesServlet, как определено в web.xml чтобы все работы JSF выполнялись. FacesServlet - это тот, который отвечает за разбор файла XHTML, сбор представленных значений формы, выполнение преобразования / проверки, обновление моделей, вызывание действий и создание выходных данных HTML. Если вы не вызываете FacesServlet по URL-адресу, то все, что вы получили (и увидите через rightclick, View Source в браузере), действительно является исходным исходным кодом XHTML.

Если , например, *.jsf, ссылка должна указывать на /register.jsf, а не на /register.xhtml. Если это, например, /faces/*, как и у вас, ссылка должна указывать на /faces/register.xhtml, а не на /register.xhtml. Один из способов избежать этой путаницы - просто изменить с /faces/* на *.xhtml. Таким образом, нижестоящее является идеальным отображением:


    facesServlet
    javax.faces.webapp.FacesServlet


    facesServlet
    *.xhtml

Если вы по какой-то причине не можете поменять на *.xhtml, то вы, вероятно, также хотели бы, чтобы конечные пользователи не могли напрямую обращаться к источнику XHTML кодировать файлы по URL-адресу. В этом случае вы можете добавить в в *.xhtml с пустым в web.xml, который предотвращает это:


    Restrict direct access to XHTML files
    
        XHTML files
        *.xhtml
    
    
 

Предстоящий JSF 2.3 решит все из вышеперечисленного, автоматически регистрируя FacesServlet в шаблоне URL-адреса *.xhtml во время запуска webapp.

См. также:


2. Убедитесь, что пространства имен XML соответствуют версии JSF

. С введением JSF 2.2 еще одна вероятная причина заключается в том, что пространства имен XML не соответствуют версии JSF. xmlns.jcp.org, как показано ниже, является новым с JSF 2.2 и не работает в старых версиях JSF. Символы почти такие же, как если бы FacesServlet не вызывался.


Если вы не можете перейти на JSF 2.2, вам нужно вместо этого использовать старые пространства имен java.sun.com XML:


См. также:


3. Было загружено несколько реализаций JSF

. Еще одна вероятная причина заключается в том, что несколько реализаций JSF были загружены вашим webapp, конфликтуя и разлагая друг друга. Например, когда ваш путь к классу среды выполнения Webapp загрязнен несколькими различными версиями JSF-библиотек или в конкретной комбинации Mojarra 2.x + Tomcat 8.x, когда в файле web.xml веб-приложения есть ненужная запись ConfigureListener, вызывающая ее загрузку дважды.





    com.sun.faces.config.ConfigureListener

При использовании Maven убедитесь, что вы правильно определяете зависимости и понимаете области зависимостей. Важно: не связывайте зависимости в webapp, если они уже предоставлены целевым сервером.

См. Также:


Убедитесь, что вы учитесь JSF правильный путь

JSF имеет очень крутую кривую обучения для тех, кто не знаком с базовыми HTTP , HTML и сервлетами . В Интернете много ресурсов низкого качества. Пожалуйста, игнорируйте фрагменты скриншотов кода, поддерживаемые любителями, в основном ориентированные на доход от рекламы, а не на обучение, такие как розы, учебник, javabeat и т. Д. Они легко узнаваемы, нарушая рекламные ссылки / баннеры. Также, пожалуйста, игнорируйте ресурсы, связанные с юрским JSF 1.x. Они легко узнаваемы с помощью JSP-файлов вместо файлов XHTML. JSP как технология просмотра устарела с тех пор, как JSF 2.0 уже в 2009 году.

Чтобы начать правильно, начните с нашей вики-страницы JSF и закажите авторитетную книгу .

См. также:

26
задан 2 revs, 2 users 100% 11 May 2010 в 20:21
поделиться

10 ответов

J, 102 символа

8#,:' #'{~,0,.~#:(3 u:'䝝啕啕啕䑅儑啕啕啕啕䗝䔑啕䕷煝䑑凝瑗屗眕凗瑵屵具瑝屝啕啕啕啕啕啕啕甗崗睅圗病巅呷甝崝圝畇嵇睑均痑巑嗇畱嵱坱煗䝗燕䗗煵䝵'){~32-~a.i.'*'(,,[)

Объяснение. Читайте снизу вверх. :

8#,:         NB. Copy 8 times
' #'{~       NB. Turn binary 0 and 1 into space and #
,            NB. Link the array into a list
0,.~         NB. Append a 0 to the end of each row of the array.
#:           NB. Turn the list of numbers into a binary array where each row is the base-2 representation of the corresponding number
(3 u:'䝝啕啕啕䑅儑啕啕啕啕䗝䔑啕䕷煝䑑凝瑗屗眕凗瑵屵具瑝屝啕啕啕啕啕啕啕甗崗睅圗病巅呷甝崝圝畇嵇睑均痑巑嗇畱嵱坱煗䝗燕䗗煵䝵') NB. Turn this wchar string into a list of ints in range 0-65535.
{~           NB. Select numbers from the string-list whose indices are...
32-~         NB. ... 32 less than ...
a.i.         NB. ... the ascii values of ...
'*'(,,[)     NB. ... the input string with a '*' on either side!
25
ответ дан 7 revs 28 November 2019 в 06:53
поделиться

Python, 304 символа

Никакое необычное сжатие Unicode. Единственная хитрость - изменить порядок персонажей, чтобы максимизировать совпадение. Моя первая программа на Python.

b="BWbwbwBwbWBwbwbwBWbwBwbwbWBwbwBwbWbwBwbwBWbwbwBWBwbwbwbWBwBwbwbWbwBwBwbWbwbwBwBWbwbwbwBWBwbWbWbWbwbWbWbWb"
s=t=""
for x in"*"+raw_input()+"*":
 i=".NI5VRD9YLH4 OB8XSE2?J6WKG0ZMA7*PC1-TF3UQ????$/+%".find(x)*2
 s+=b[i:i+9]+"w"
for x in s:t+=["#"," ","###","   "]["bwBW".find(x)]
for k in b[-8:]:print(t)
7
ответ дан xan 28 November 2019 в 06:53
поделиться

Ассемблер

Собирает до 220 байт.

    mov di,ds
    mov al,42
    call a3
    mov dh,[80h]
    mov si,82h
 a1:lodsb
    call a3
    dec dh
    jnz a1
    mov al,42
    call a3
    mov ax,2573
    stosw
    mov al,36
    stosb
    mov cl,8
 a2:mov dx,ds
    mov ah,9
    int 21h
    loop a2
 a3:sub al,97
    cmp al,26
    ja a4
    sub al,32
 a4:mov bx,a6-3
 a8:add bx,3
    cmp bx,a7
    jae ret
    cmp al,[bx]
    jne a8
    mov bp,[bx+1]
 a5:rcr bp,1
    mov al,36
    sbb al,0
    and al,35
    stosb
    or bp,bp
    jnz a5
    mov al,32
    stosb
    ret
 a6:dd 0D05DC5CFh,01DD17517h,05477D275h,0D475C5D3h,01DD55717h,07745D657h,0D85D17D7h,057E05D1Dh
    dd 0745DE174h,0E35177E2h,0D7E47475h,051DDE551h,0E77715E6h,05DE85C57h,05C75E95Ch,0EB7157EAh
    dd 077EC715Dh,07175ED45h,0EF45D7EEh,0D5F045DDh,04757F171h,0F3475DF2h,047F44775h,07571F575h
    dd 0F755C7F6h,047F875D1h,05771F957h,0CD7751CCh,071BF5D47h,05111C35Dh,0CA4511CEh,045C44451h
    dd 05DD1C944h
 a7:

Не так много возможностей для хитрых трюков.

6
ответ дан 2 revs 28 November 2019 в 06:53
поделиться

Python 3.1, с Юникодом (154 158 символов)

На основе решения J , использует " символ # может быть заменен другим символом более высокой плотности, если требуется », определяя плотность как площадь темных частей, разделенную наименьшим ограничивающим прямоугольником глифа . :)

print((''.join(" #"[int(c)]for d in"%r"%input()for c in bin(2*ord("䝝啕啕啕䑅儑啕䗝啕啕啕䔑啕䕷煝䑑凝瑗屗眕凗瑵屵具瑝屝啕啕啕啕啕啕啕甗崗睅圗病巅呷甝崝圝畇嵇睑均痑巑嗇畱嵱坱煗䝗燕䗗煵䝵"[ord(d)-32]))[2:])+"\n")*8)
3
ответ дан 3 revs 28 November 2019 в 06:53
поделиться

Python (2.6) - 430 312 302 персонажа

Третий вариант решения проблемы, еще есть возможности для улучшения. Количество символов по wc -m.

#coding:UTF8
k=""
for c in"*%s*"%raw_input():
 i=" $*.02468BDFHJLNPRTVXZ%+-/13579ACEGIKMOQSUWY".find(c)*2
 for j in"%05d%s"%tuple(map(ord,u"ಊҺ௖ூ௄Һ姢ҺЈҺӎϴЈϴӐϲ刦ҺҺ௄ϴ௄Ҽூ划ಊϴಊҺЈϴЈҼІ划ӎϴӎಊϴ௄ϴಌϲІ௖ூ௖ூҼ௖І刦ϴ勮ϲ刨ϲІҼӎҺ划௄勚ூ刔ூϲಌҺಊ划Ј勚І刔ІϲӐҺӎ姢ϴ媪ϲ姤ϲ"[i:i+2])):k+=["#"," ","###","   "][int(j)]
 k+=" "
exec"print k;"*8
2
ответ дан 5 revs 28 November 2019 в 06:53
поделиться

Я сделал код для работы со штрих-кодами кода 39 во встроенных системах. Есть два стиля кодов, которые я считаю 39 "обычными" кодами и четырьмя "чудаковами". Обычные коды имеют один из десяти шаблонов ширины стержня (два широких три узких) и один из четырех шаблонов ширины пространства (один широкий три узких). Чудеса имеют пять узких полос и один из четырех шаблонов ширины полос (три широких и один узкий). Чтобы отобразить штрих-код с компактным кодом, преобразуйте символ в число 0–39 (для нормальных кодов) или 40, 50, 60 или 70 для «странных шаров». Затем divmod 10. Верхняя цифра выберет один из восьми шаблонов ширины пространства; если верхняя цифра равна трем или меньше, нижняя цифра выберет один из десяти шаблонов ширины стержня. Если верхняя цифра 4-7, все пять столбцов должны быть узкими.

Код работает очень компактно, используя несколько небольших справочных таблиц. Поскольку справочные таблицы могут быть компактно представлены в виде строк в исходном коде, подходы с большими справочными таблицами могут иметь более короткий исходный код (хотя я думаю, что для Code Golf размер исходного кода должен учитываться в байтах с использованием наиболее подходящего кодирования; подход со строкой странные символы, для хранения которых требуется три байта в UTF-8, и два байта для UTF-16, должны либо «заряжаться» по 3 байта каждый для символов странного шара, либо два байта каждый для всех символов, в зависимости от того, что меньше. Подход, в котором используется выбор нечетных символов, которые полностью помещаются в определенную однобайтовую кодовую страницу, должен оплачиваться по одному байту на символ.

0
ответ дан supercat 28 November 2019 в 06:53
поделиться

спам спам спам спам прекрасный спам

-1
ответ дан 2 revs, 2 users 65%veda300 28 November 2019 в 06:53
поделиться

Ruby (1.9) - 121 132 141 166 170 289 295

Hats-off to David

puts"*#{$_}*
".tr(" --9*$+%A-Z","䝝䕷煝䑑凝瑗屗眕凗瑵屵具瑝屝䗝䑅䔑儑甗崗睅圗病巅呷甝崝圝畇嵇睑均痑巑嗇畱嵱坱煗䝗燕䗗煵䝵").gsub(/./){|c|c.ord.to_s(2).tr"01"," #"}*8


echo "ABC" | ruby -ne 'puts"*#{$_}*
".tr(" --9*$+%A-Z","䝝䕷煝䑑凝瑗屗眕凗瑵屵具瑝屝䗝䑅䔑儑甗崗睅圗病巅呷甝崝圝畇嵇睑均痑巑嗇畱嵱坱煗䝗燕䗗煵䝵").gsub(/./){|c|c.ord.to_s(2).tr"01"," #"}*8'

Хранит только 44 необходимых символа и использует функцию транслитерации Ruby для их отображения

<space>
<-> to <9>
<*>
<$>
<+>
<%>
<A> to <Z>

в кодированные значения.

8
ответ дан 28 November 2019 в 06:53
поделиться

Python 3. 1, без Unicode (213 215 223 240 248 249 символов)

o=""
for c in"%r"%input():
 u="W3YZ56C$EF. 89'0HIJM/OP+%RSTUV12X4ABD-7GKLNQ".find(c);n=sum(b"))&&&,(*&2&&&)),&/8(*&1)<&/V&&&)),&/5);D&/S"[u:])-930+35*u
 while n:o+="###"[n%2*2:]+"   "[n&2:];n>>=2
print((o+"\n")*8)

Пояснение:

Последовательность кода 39 кодируется в число base-4 (левый старший = наименьший значащий) с:

  • bw → 3
  • Bw → 2
  • bW → 1
  • BW → 0

Затем последовательность сортируется, например. например,

20333   Q
21233   N
21323   L
...

Берется разность соседних записей, что дает список вида [48, 12, 3, ...]. Затем к этому списку добавляется 35, чтобы убедиться, что числа попадают в диапазон ASCII. Это дает строку "))&&&&,...".

Этот код также воспользовался тем, что * не появится на входе, поэтому мы можем заменить его на любой недопустимый символ, включая '. В CPython repr("ABC") == "'ABC'", поэтому мы можем избавиться от двух символов.

5
ответ дан 28 November 2019 в 06:53
поделиться

Lua, 318 символов

z={"1358ACEHKMORUWY.","UVWXYZ-. $/+*","2369BCFILMPSVWZ ","0123456789$/%","0456DEFJNOPTXYZ*","ABCDEFGHIJ$+%","0789GHIJQRST-. *","KLMNOPQRST/+%","1247ABDGKLNQUVX-",""}i="*"..(...).."*"o=""for c in i:gfind(".")do for j=1,10 do o=o..((j%2==0 and" "or"#"):rep(z[j]:find(c,1,true)and 3 or 1))end end for j=1,8 do print(o)end

Я не ожидаю, что смогу выиграть какие-либо вопросы по код-гольфу с Lua, поэтому я не чувствую себя плохо, отвечая на свой собственный вызов здесь. Также использовалась другая кодировка, которая, как мне показалось, могла быть интересна другим.

Другие наблюдения

При внимательном рассмотрении кодировки кажется, что есть способ обойтись без просмотра таблицы и напрямую вычислить кодировку штрих-кода. Однако я обнаружил, что мои попытки построить вычисления потребовали больше кода, чем таблица. (Это может быть не так в других языках.)

Разделив символы на группы, которые указали, где были широкие полосы и пробелы, я увидел некоторые интересные закономерности. Кажется, что есть только одно широкое пространство для 40 символов, причем $ / +% являются исключениями (каждый из них имеет три пробела). 40 символов разделяются по 10 в каждом слоте. И есть две широкие полосы для тех же 40 символов. Кажется, что широкие полосы имеют двоичную кодировку, причем последняя полоса является битом четности. Наборы битов полосы - 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, где избегаются числа, имеющие более 2 битов.

1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-._*
1 3 5  8  A C E  H  K M O  R  U W Y  .   1010100100
 23  6  9  BC  F  I  LM  P  S  VW  Z  _  0110010010
   456   0   DEF   J   NOP   T   XYZ   * 0001110001
      7890      GHIJ      QRST      -._* 0000001111
12 4  7   AB D  G   KL N  Q   UV X  -    1101001000 --> Parity

Думаю, в другой день будет нелегко увидеть, можно ли закодировать штрих-коды без справочных таблиц.

1
ответ дан 28 November 2019 в 06:53
поделиться
Другие вопросы по тегам:

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