Переменная Perl не отображает правильное значение - PullRequest
0 голосов
/ 31 августа 2011

Я попытаюсь ответить на этот вопрос еще раз, так как, по-видимому, в прошлый раз, когда я его задал, я не очень хорошо это сделал ... И снова:

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

Оператор if, который устанавливает переменную $ defMessage, выполняется правильно, но независимо от значения входных переменных текст по умолчанию втекстовая область не изменяется на фактическое значение, сохраненное в $ defMessage.

Кто-нибудь может определить, почему это может происходить?

my $defMessage = undef;

$defMessage = 'CONCAT 1';

if ($templateLength =~ SEND_OPTIONS_CONCAT_1) {
    $defMessage = 'CONCAT 1';
} elsif ($templateLength =~ SEND_OPTIONS_CONCAT_2) {
    $defMessage = 'CONCAT 2';
} elsif ($templateLength =~ SEND_OPTIONS_CONCAT_3) {
    $defMessage = 'CONCAT 3';
}

print $q->start_form(
    -name=>'main',
    -method=>'POST',
);

print $q->start_table(
    {-align=>'center', -border=>1}
);
print $q->Tr(
    $q->td(
        {-align=>'center'},
        'Message<br>'.$q->textarea(
            -name=>'sendMessage',
            -size=>15,
            -rows=>10,
            -columns=>15,
            -value=>$defMessage,
        ),
    ),
);

Я пытался изменить

my $defMessage = undef;

до

use vars qw($defMessage);

но это тоже не сработало ...

Ответы [ 2 ]

4 голосов
/ 31 августа 2011

Если в обрабатываемом запросе указан параметр field_name, CGI будет использовать это значение вместо значения по умолчанию, которое вы указываете, если только вы не вызовете textarea с помощью -override=>1 или явно не измените параметр ($q->param('field_name',$defMessage)) перед вызовом textarea.

Это не относится к textarea; все Методы ввода формы CGI работают таким образом.

0 голосов
/ 31 августа 2011

Элементы текстовой области не похожи на другие элементы управления в HTML, поскольку атрибут value не используется.Вместо этого, содержание элемента имеет значение.Это проявляется в немного другом интерфейсе.Документация CGI (см .: http://search.cpan.org/dist/CGI/lib/CGI.pm#CREATING_A_BIG_TEXT_FIELD) показывает ключ для использования по умолчанию значение -default, а не -value.

Итак, попробуйте:

'Message<br>'.$q->textarea(
            -name=>'sendMessage',
#           -size=>15,              # Deleted, doesn't apply to textarea controls
            -rows=>10,
            -columns=>15,
            -default=>$defMessage,  # Amended line
        ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...