JSP 中 Struts2 映射条目的字段名称

发布于 2024-07-16 18:28:16 字数 174 浏览 6 评论 0原文

我想从 JSP 填充 Struts2 操作的地图属性。 我应该使用什么格式的数据名称? 最初我对填充 Map感兴趣。 但将来我会对填充 Map感兴趣。 其中 DomainClass 有自己的属性。

I want to populate a map property on a Struts2 action from a JSP. What is the format of the data names that I should use? Initially I am interested in populating a Map<String, String> but in the future I would be interesting in populating a Map<String, DomainClass> where the DomainClass has properties of its own.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷情 2024-07-23 18:28:16

我有一个操作,其属性如下 -

private Map<String,String> assetProps;
...
public Map<String, String> getAssetProps() {
    return assetProps;
}

public void setAssetProps(Map<String, String> assetProps) {
    this.assetProps = assetProps;
}

要在地图上设置值,基本上有两个步骤。 首先,OGNL 无法实例化地图,因此这取决于您。 在我的操作中,我实现了 Preparable 接口,但在运行“public String input()”方法之前实例化它,如下所示 -

public class EditAction extends ActionSupport implements Preparable {
...
    public void prepare() {
        // just satisfying Preparable interface so we can have prepareInput()

    }

    public void prepareInput() throws Exception {
        assetProps = new HashMap<String,String>();
    }

现在,该对象是非空的,我可以在 JSP 中使用类似于以下的语法 -

  <s:iterator value="asset.properties" var="prop">
    <sjx:textfield name="%{'assetProps[\\'' +#prop.propName +'\\']'}" 
           value="%{#prop.propValue}" 
           label="%{#prop.propName}" size="25"/>
  </s:iterator>

迭代器从堆栈中取出一组对象并对其进行迭代。 重要的部分是“name=”部分,请注意双转义的单引号。 这样,当页面呈现时,输入元素的名称将变为(例如)- assetProps['Screen Size']。 当页面提交时,在“public voidexecute()”方法中,assetProps 被完全填充。

I have an action, with a property as follows -

private Map<String,String> assetProps;
...
public Map<String, String> getAssetProps() {
    return assetProps;
}

public void setAssetProps(Map<String, String> assetProps) {
    this.assetProps = assetProps;
}

To set values onto the map, there are basically two steps. First off, OGNL can't instantiate the map, so it is up to you. In my action, I implement the Preparable interface, but instantiate it before running the 'public String input()' method as follows -

public class EditAction extends ActionSupport implements Preparable {
...
    public void prepare() {
        // just satisfying Preparable interface so we can have prepareInput()

    }

    public void prepareInput() throws Exception {
        assetProps = new HashMap<String,String>();
    }

Now, the object is non-null, I can use syntax similar to the following in the JSP -

  <s:iterator value="asset.properties" var="prop">
    <sjx:textfield name="%{'assetProps[\\'' +#prop.propName +'\\']'}" 
           value="%{#prop.propValue}" 
           label="%{#prop.propName}" size="25"/>
  </s:iterator>

The iterator pulls a set of objects off the stack and iterates over it. The important part is the "name=" section, notice the double-escaped single quotes. That way, when the page renders, the name of the input element becomes (for example) - assetProps['Screen Size']. When the page is submitted, inside the "public void execute()" method, assetProps is fully populated.

茶花眉 2024-07-23 18:28:16

这是另一个执行类似操作的代码片段,以防它对某人有帮助。

<s:iterator value="storageIds" var="sids">
    <s:hidden name="%{'storageIds[\\'' + key +'\\']'}" value="%{#sids.value}"/>
</s:iterator>

我的操作有一个名为 storageIdsMap

迭代 Map 时,键和值解析为 Map.Entry 属性。

Here is another code snippet doing something similar, in case it helps someone.

<s:iterator value="storageIds" var="sids">
    <s:hidden name="%{'storageIds[\\'' + key +'\\']'}" value="%{#sids.value}"/>
</s:iterator>

My action has a Map<String,String> named storageIds

When iterating a Map, key and value resolve to the Map.Entry properties.

天煞孤星 2024-07-23 18:28:16

尝试这个 。 非常适合我

<s:iterator value="configMap" id="daa">
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" />
</s:iterator>

Try This . Working perfectly for me

<s:iterator value="configMap" id="daa">
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" />
</s:iterator>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文