Проблема, которую вы затрагиваете выше, вызвана тем фактом, что обработчик не может обработать вашу ссылку действия, поскольку он не может сгенерировать идентификатор для компонента ссылки. - означает, что ссылка на активированный компонент фактически отсутствует.
Оба ваших примера на самом деле не совсем верны. Однако со ссылкой, сгенерированной за пределами таблицы, обработчик представления каким-то образом может определить идентификатор для компонента и оказывается в нужном месте при выполнении действия.
Если мы посмотрим на то, что генерирует JSF Mojarra при вызове приведенного выше кода, мы увидим следующее:
Ссылки внутри таблицы получают ссылку на [111 ], но нет идентификатора, связанного с компонентом, поэтому ссылка не будет работать.
Ссылка вне таблицы получает ссылку на form:j_idt5
и генерируется идентификатор j_id1:javax.faces.ViewState:0
. Так что, хотя это действительно вызывает действие - корреляция link / id не совсем верна.
Так ясно, что рендерер может определить сгенерированный идентификатор для ссылки, но он никогда не устанавливает этот сгенерированный идентификатор на фактический компонент / тег. Это в некоторой степени проблема.
Решение в том, чтобы помочь JSF и обработчику представления выяснить путь к компоненту с действием. Вы можете сделать это, принудительно установив идентификатор при программной генерации ссылки на команду - внутри метода getTable()
добавьте следующий код:
inlink.setId("link");
Это должно позволить рендереру отображать действительную страницу с ссылки на рабочие действия.
Существует несколько основных вещей, которые можно сделать при приеме в классическое приложение ASP, но Вы, вероятно, закончите тем, что сожалели, что делали их.
Я не сделал бы ни одного из этого. Для перефразирования Steve Yegge (я думаю), "нет ничего неправильно с классическим приложением ASP, которое не может быть исправлено с общим количеством, переписывают". Я очень серьезно отношусь к этому - я не думаю, что существует большая пустая трата времени программиста в этом мире, чем поддержание приложения ASP, и проблема просто ухудшается, поскольку ASP становится устаревшим.
Пример:
<%@ Language=VBScript %>
<% Option Explicit %>
<% Response.Buffer = true%>
<html>
<head>
<!--#include file="../general/t-head.asp"-->
<!--#include file="../bus/product.asp"-->
<title>Products page</title>
</head>
<body>
<!--#include file="../general/t-begin.asp"-->
<% 'all your code %>
<!--#include file="../general/t-end.asp"-->
</body>
</html>
Список пункта маркированного списка @MusiGenisis является хорошим советом следовать, но я не согласился бы с -
"Я не сделал бы ни одного из этого. Для перефразирования Steve Yegge (я думаю), "нет ничего неправильно с классическим приложением ASP, которое не может быть исправлено с общим количеством, переписывают". Я очень серьезно отношусь к этому - я не думаю, что существует большая пустая трата времени программиста в этом мире, чем поддержание приложения ASP, и проблема просто ухудшается, поскольку ASP становится устаревшим".
Очень хороший, но если это - значительное приложение прежней версии, делающее завершенный, переписывает, часто не возможно из-за отсутствия времени/ресурса разработчика.
У нас есть довольно большое классическое приложение ASP, которое вырастило руки и участки за эти годы, это не симпатично, но это действительно служит бизнес-потребностям. У нас нет времени проводить следующие шесть месяцев, делая полное, переписывают, это было бы хорошо, но просто не возможно. Наш подход -
Где существует новая требуемая функциональность, она реализована в ASP.NET. Это происходит 95% времени. 5% пограничных случаев, обычно являющихся этим, существуют большое число очков, где новый код приложения касается старого приложения, требующего, чтобы мы сделали, много классического ASP переделывает потенциально создание более хрупкого приложения.
Где существует изменение в функциональности, мы оцениваем, можем ли мы осуществить рефакторинг на ASP.NET с минимальным влиянием. Если это не будет возможно затем, то мы реализуем изменение в классическом ASP и уберем существующий код, поскольку мы продвигаемся, например, упрощение включают вложение файла, заменяя JavaScript большим количеством перекрестного браузера дружественный код, такая вещь.
В ответе на Ваш вопрос о #ifndef нет эквивалента, я боюсь.
я думаю, что необходимо считать перемещение кода от VBScript ASP до Visual Basic COM DLL. это упростит на Вас имеющий, слишком много включает.
Ничего себе. Меня постоянно удивляет, у сколько людей есть ненависть к ASP. В достойных руках это - совершенно способный язык для разработки веб-приложений.
Однако я признаю, что путь включает файлы, управляются в ASP, может быть что-то вроде brainache - потому что (в зависимости от того, как Вы используете их) они должны быть загружены и проанализированы, даже если Вы не используете половину функций, содержавших в.
Я склонен иметь, каждый включает файл (initialise.asp
или некоторые такой), который самостоятельно включает ссылки на несколько библиотек функций (lib_http.asp
, lib_mssql.asp
или подобный), и все библиотечные функции являются автономными, таким образом, нет никакого беспокойства о пересекающихся переменных. Любой глобальный Вар объявляется и устанавливается в основном файле. Это означает, что я могу использовать функцию где угодно, любое время и не волноваться о том, где она была определена, это просто там для использования. И IDE, такие как Visual Studio и Primalscript имеют способность "перейти к определению" при нахождении вызова к функции, которую Вы не распознаете.
Затем любой определенный для сценария включает, включены в сценарий после того, как вызов этому ведущему устройству включает файл.
Я признаю, что это - требующий много памяти подход, поскольку все функции во всех библиотеках компилируются для каждого вызова сценария, таким образом, совершенствование потребностей метода для каждого сайта, который Вы разрабатываете - решает, что звонить через ведущее устройство, включают и что является более определенным для страницы. Было бы хорошо смочь только загрузить то, в чем Вы нуждаетесь - но это - подход DLL и не доступно для большинства реальных разработок, и также необходимо было бы уравновесить стоимость процессора компиляции маленьких сценариев по сравнению с загружающимися компонентами.
Краткая структура каталогов является необходимым и легко разработанный, но это может быть тяжелая работа, чтобы пробраться через весь код в существующем сайте и изменить любые ссылки или вызовы mappath. Кроме того, знайте, что некоторые администраторы IIS запрещают '..\'
метод пересекающих каталогов через VBScript, таким образом все ссылки на файл должны быть полными путями.
Я не знаю о способе предотвратить двойное включение кроме получения сообщения об ошибке, которое является. Вы - наблюдение, включает помещенный всюду по странице, которая делает их трудными определить?
Так же, как в стороне, Вы работаете с копией кода и базы данных по серверу разработки? На основе моего опыта первое, что нужно сделать является отдельным самостоятельно от живого сайта как можно скорее. В то время как стычка первоначально, это даст Вам свободу внести изменения, не портя живой сайт. Легко делать то крошечным изменением во включении и BAM! целый сайт понижается.
Я работал через несколько проектов как, Вы описали и использовали следующие стратегии:
Завершенный переписывают - прекрасный, когда существует время/деньги, но обычно я получаю вызов, когда что-то пошло не так, как надо, и результаты необходимы как можно скорее.
Меньшие проекты - я открываю все в IDE и только начинаю искать все файлы проекта functions/sub для создания знания включать логики. В значительной степени каждый раз, все распространено везде, таким образом, я начинаю восстанавливать включение, организованное бизнес-логикой. Я также натыкался на встроенный код (необработанный код, не нижние индексы или функции) брошенный во включение, таким образом, я буду обычно просто задерживать код в страницу для рефакторинга позже.
Большие проекты - я буду использовать некоторый код, у меня есть наложение вокруг, чтобы проанализировать включение для строк с sub/function заголовками и вывести тех, которые к текстовому файлу для создания списка того, что - стандартные программы то, где и относятся к этому. Это пригождается, когда у Вас есть тонна, включает на каждой странице и не может получить Вашу голову вокруг кодовой базы.