2

这可能是一个非常基本的问题,但我很困惑。我有几个疑问:

  1. 在 spring 形式<form:form中,如果未指定方法,那么它是 GET 还是 POST?
  2. 如果弹簧表单带有<form:form命令名称,那么是 GET 还是 POST?

第二个问题是因为我在代码中看到“form:form commandName=xyz action=abc”当我检查 HTML 代码(查看源代码)时,它转换为“form action=abc method=POST”

请帮我解决一下这个。


发生更改时,LongListSelector 不会从 ViewModel 更新

我的 XAML 文件具有以下内容:

        <toolkit:ListPicker x:Name="lstSetups" Margin="0" VerticalAlignment="Top" 
                            ItemsSource="{Binding BusRouteSetups}"
                            SelectedItem="{Binding SelectedSetup, Mode=TwoWay}"
                            Background="{StaticResource BackgroundBrush}" BorderBrush="{StaticResource AccentForegroundBrush}" 
                            Foreground="{StaticResource AccentForegroundBrush}" 
                            Header="{Binding LabelsResources.AreaSetup, Mode=OneWay, Source={StaticResource LocalizedLabels}}" 
                            Template="{StaticResource ListPickerControlTemplate}" 
                            ExpansionMode="FullScreenOnly" 
                            FullModeItemTemplate="{StaticResource ChooseAreaDataTemplate}" 
                            ItemTemplate="{StaticResource AreaSetupNormalDataTemplate}"/>
        <phone:LongListSelector x:Name="lBusRoutes" 
                                 ItemsSource="{Binding SelectedSetupBusRoutes}"
                                SelectionChanged="lBusRoutes_SelectionChanged"
                                Grid.Row="1" Margin="0,12,0,0" ItemTemplate="{StaticResource BusRoutesDataTemplate}"/>

请注意,ListPicker 有两种方式绑定到 ViewModel 中的 SelectedSetup。LongListSelector 绑定到 View Model 中的 SelectedSetupBusRoutes

ViewModel 具有以下代码:

    public Setup SelectedSetup
    {
        get
        {
            return _SelectedSetup;
        }
        set
        {
            if (_SelectedSetup != value)
            {
                _SelectedSetup = value;
                NotifyPropertyChanged("SelectedSetup");
            }
        }
    }

    public ObservableCollection<Route> SelectedSetupBusRoutes
    {
        get
        {
            if (SelectedSetup != null)
            {
                return new ObservableCollection<Route>(SelectedSetup.Routes);
            }
            return null; 
        }
    }

当我从更新 ViewModel 但不会导致 LongListSelector 更新的 ListPicker 更改所选设置时。如果您移出页面然后重新进入,它确实会更新。

我应该处理 ListPicker 更改事件并重新绑定 LongListSelector 还是 ViewModel 可能会发生这种情况但缺少某些东西?

4

2 回答 2

5

没有指定操作的HTMLform始终是 GET。它是 HTML 标准。 http://www.w3.org/TR/html401/interact/forms.html#h-17.3

但是当您查看FormTagSpring 源代码时,您会注意到以下代码:

public class FormTag extends AbstractHtmlElementTag {

/** The default HTTP method using which form values are sent to the server: "post" */
private static final String DEFAULT_METHOD = "post";

所以对于弹簧标签<form:form动作是默认发布的。

commandName只是与您的表单绑定的模型属性的名称。它与方法类型无关。此外,它相当于modelAttribute所以你可以使用任何一个。

于 2014-05-21T09:27:17.937 回答
0

Spring 表单的默认方法为 POST。如果你想做get,你必须在form:form标签中写上method="get"。

于 2015-07-13T06:47:37.647 回答