有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从jsp调用动作方法

简单地说。。我需要知道这些列表属性是否做相同的工作

<s:select name="city" label="City" list="cities" listKey="id" listValue="name" />

<s:select name="city" label="City" list="%{getCities()}" listKey="id" listValue="name" />

我们是否可以调用上述操作方法,如果“是”,那么正确的方法是什么

谢谢


共 (1) 个答案

  1. # 1 楼答案

    list="cities"list="%{getCities()}"两者完全相同。这两个函数都在action类中调用List<City> cities的getter来读取valuestack中的值

    如果删除getter,两者都会抛出错误

    1. <s:select name="city" label="City" list="cities[0]" listKey="id" listValue="name" />
    

    被评估为

    a. <s:select name="city" label="City" list="%{cities[0]}" listKey="id" listValue="name" />
    
    b. <s:select name="city" label="City" list="%{getCities().get(0)}" listKey="id" listValue="name" />
    

    1、a&;b是相同的,因为%forcesOGNL评估。这将查询堆栈中的特定属性

    OGNL支持集合,这就是为什么我们可以使用这三个

    当我们使用特殊需求时,我们称之为行动

    例如

     <s:url id="databaseList" action="fetch-citynames" />
     <sd:autocompleter key="search"
         href="%{databaseList}" name="searchText" />
    

    这里fetch-citynames返回json列表

    另见this link

    实际上我读了here

    ognl

    主要原因是%{}语法用于强制OGNL求值,否则Struts会将该值视为字符串文本

    例如,

      <s:property value="name" />
    

    将在值堆栈中查找name属性,即通过调用getName()检索的值

    如果要强制它使用文本值“name”,则需要使用%{}语法-

     <s:property value="%{'name'}" />
    

    但是在<s:select list="" />的情况下,它使用OGNL Collection Construction

    下面是OGNL如何调用方法。。见here