簡體   English   中英

修剪Struts2文本字符串輸入

[英]Trimming Struts2 textfield string input

修剪此字符串的最佳方法是什么?放置修剪代碼的最佳位置在哪里?

假設我的jsp中有以下文本字段:

<s:textfield label="First Name" name="person.firstname"/>

動作類:

public class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
    private Person person;
    // Getters, setters and action logic
}

豆子:

public class Person implements Serializable {
    private String lastname;
    private String firstname;
    // Getters and setters
}

我可以更改bean中的默認設置,但這似乎是一個黑客:

public void setFirstname(String firstname) {
    this.firstname = firstname.trim();
}

編輯 :我也看到了這個問題: struts2修剪從表單獲取的所有字符串,其中一些人也建議“正確”的方法是使用攔截器。

為什么攔截器是“正確的”方式? 改變bean的二傳手有什么不對?

它可以使用Struts2轉換器完成。

public class TrimmingStringConverter extends StrutsTypeConverter {

    public Object convertFromString(Map ctx, String[] values, Class arg2) {
        if (values != null && values.length > 0) {
            return values[0].trim();
        }

        return null;
    }

    public String convertToString(Map ctx, Object o) {
        if (o != null) {
            return o.toString();
        }
        else {
            return null;
        }
    }

    public Object convertValue(Map context, Object o, Class toClass)
    {
        if (o == null) {
            return null;
        } else if (toClass == java.lang.String.class) {
            if (o instanceof String[]) {
                String[] os = (String[]) o;

                if (os.length > 0) {
                    return os[0].trim();
                }
            }

            return o.toString().trim();
        }

        return super.convertValue(context, o, toClass);
   }
}

它必須在xwork-conversion.properties中注冊:java.lang.String = es.jogaco.webapp.TrimmingStringConverter

這將應用於所有用戶輸入。

如果您有默認的struts2攔截器,它將起作用。 引自struts2 doc:

默認情況下,轉換攔截器包含在默認堆棧中的struts-default.xml中

另外,我在struts2應用程序中使用它。

簡短的回答是默認情況下 ,沒有構建機制來執行此操作,您需要在您的操作類中執行此操作,或者某種類型的java腳本將為您執行此操作。

其他可能的方法是創建一個攔截器來執行此操作,以選擇排除或類似的徒步旅行。

我相信Interceptor是一個很好的方法來實現這一點,最好有這樣的攔截器來自S2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM