grails输入标记:如果value是空格,则不显示占位符

时间:2014-06-30 16:00:41

标签: grails input placeholder gsp

我的gsp(Grails项目)中有一个输入标记字段,我希望在字段为空时使用占位符来显示一些文本:

<input type="text" name="textField" id="textField" value="${receiptInstance?.patient?.surname} ${receiptInstance?.patient?.name}" placeholder=<g:message code="patient.choose" default="Insert patient..." />/>

当我创建一个新对象时,value不为空,但它有一个空格,因此不显示占位符。 如何更改此类行为以使用占位符?有没有办法消除value中的空白?

3 个答案:

答案 0 :(得分:2)

解决方法可以是:

<g:set var="myVal" value="${receiptInstance?.patient?.surname?:''} ${receiptInstance?.patient?.name?:''}"/>
<input type="text" name="textField" id="textField" value="${myVal?.trim()}" placeholder='<g:message code="patient.choose" default="Insert patient..." />'/>

注意: - 在我添加的占位符中添加'。或者您也可以使用以下代码

<input type="text" name="textField" id="textField" value="${myVal?.trim()}" placeholder="${g.message(code: 'patient.choose', default: 'Insert Patient...')}"/>

答案 1 :(得分:0)

你可以这样做:

<g:set var="tmpValue" value="${receiptInstance?.patient?.surname} ${receiptInstance?.patient?.name}"/>
<g:textField name="textField"
             value="${tmpValue.trim()}"
             placeholder="${message(code: 'patient.choose', default:'Insert patient')}"/>

如果你想摆脱临时变量,你可以这样做:

<g:textField name="textField"
             value="${(receiptInstance?.patient?.surname + ' ' + receiptInstance?.patient?.name).trim()}"
             placeholder="${message(code: 'patient.choose', default:'Insert patient')}"/>

无论哪种方式,你都需要处理文字&#34; null&#34;如果receiptInstance?.patient?.surname或receiptInstance?.patient?.name,则显示为null。这很简单,但这是一个单独的问题,我已经把它留在了上面,以保持上面的代码集中在问题上。

我希望有所帮助。

修改

您还可以使用简单的标记来提供帮助:

// grails-app/taglib/com/demo/PatientTagLib.groovy
package com.demo

class PatientTagLib {
    static defaultEncodeAs = [taglib:'html']

    static namespace = 'patient'

    def fullName = { attrs ->
        def patient = attrs.patient
        if(patient) {
            def fullNameStr = patient.name ?: '' +
                              ' ' +
                              patient.surname ?: ''
            out << fullNameStr.trim()
        }
    }
}

然后在你的GSP中:

<g:textField name="textField"
             value="${patient.fullName(patient: receiptInstance?.patient)}"
             placeholder="${message(code: 'patient.choose', default:'Insert patient')}"/>

答案 2 :(得分:0)

可以使用.with()的一些魔力:

<input type="text" name="textField" id="textField" value="${receiptInstance?.patient?.with{surname +' '+ name}}" placeholder="<g:message code='patient.choose' default='Insert patient...' />"/>