Вычитание 2 списков в Python

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

  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 и закажите авторитетную книгу .

См. также:

75
задан SilentGhost 9 October 2009 в 12:09
поделиться

8 ответов

Если это - что-то, что Вы заканчиваете тем, что часто делали, и с различными операциями, необходимо, вероятно, создать класс, чтобы обработать случаи как это или лучше пользоваться некоторой библиотекой как Numpy.

Иначе, ищите понимания списка используемый с zip встроенная функция:

[a_i - b_i for a_i, b_i in zip(a, b)]
120
ответ дан SimplyKnownAsG 24 November 2019 в 11:26
поделиться

Немного отличающийся Векторный класс.

class Vector( object ):
    def __init__(self, *data):
        self.data = data
    def __repr__(self):
        return repr(self.data) 
    def __add__(self, other):
        return tuple( (a+b for a,b in zip(self.data, other.data) ) )  
    def __sub__(self, other):
        return tuple( (a-b for a,b in zip(self.data, other.data) ) )

Vector(1, 2, 3) - Vector(1, 1, 1)
4
ответ дан S.Lott 24 November 2019 в 11:26
поделиться

Если у Вас есть два списка, названные и 'b', можно сделать: [m - n for m,n in zip(a,b)]

6
ответ дан Andy Mikula 24 November 2019 в 11:26
поделиться

Я должен был бы рекомендовать , NumPy также

Не только является этим быстрее для того, чтобы сделать векторную математику, но и это также имеет тонну функций удобства.

, Если Вы хотите что-то еще быстрее для 1d векторы, попробуйте vop

, Это подобно MatLab, но свободно и материал. Вот пример того, что Вы сделали бы

from numpy import matrix
a = matrix((2,2,2))
b = matrix((1,1,1))
ret = a - b
print ret
>> [[1 1 1]]

Бум.

9
ответ дан mikelikespie 24 November 2019 в 11:26
поделиться

Если Ваши списки являются a и b, можно сделать:

map(int.__sub__, a, b)

, Но Вы, вероятно, не были должны. Никто не будет знать то, что это означает.

13
ответ дан recursive 24 November 2019 в 11:26
поделиться

Вот альтернатива для списка пониманий. Карта выполняет итерации через список (списки) (последние аргументы), делая так одновременно, и передает их элементы как аргументы функции (первый аргумент). Это возвращает получающийся список.

map(operator.sub, a, b)

Этот код, потому что имеет меньше синтаксиса (который более эстетичен для меня), и по-видимому это на 40% быстрее для списков длины 5 (см. комментарий bobince). Однако, любое решение будет работать.

81
ответ дан Nikhil Chelliah 24 November 2019 в 11:26
поделиться

Если бы Вы планируете выполнение более, чем простого лайнеры, было бы лучше реализовать Ваш собственный класс и переопределить соответствующие операторы, поскольку они относятся к Вашему случаю.

Взятый от Математика в Python :

class Vector:

  def __init__(self, data):
    self.data = data

  def __repr__(self):
    return repr(self.data)  

  def __add__(self, other):
    data = []
    for j in range(len(self.data)):
      data.append(self.data[j] + other.data[j])
    return Vector(data)  

x = Vector([1, 2, 3])    
print x + x
3
ответ дан codelogic 24 November 2019 в 11:26
поделиться

Try this:

list(array([1,2,3])-1)
-1
ответ дан 24 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

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