Time is now JSF converted and validated
This commit is contained in:
		
							parent
							
								
									ab9255d3d4
								
							
						
					
					
						commit
						f87854d02f
					
				| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
/**
 | 
			
		||||
 * Copyright (C) 2022, Tim Holloway
 | 
			
		||||
 *
 | 
			
		||||
 * Date written: Jan 9, 2022
 | 
			
		||||
 * Author: Tim Holloway <timh@mousetech.com>
 | 
			
		||||
 */
 | 
			
		||||
package com.mousetech.gourmetj.utils;
 | 
			
		||||
 | 
			
		||||
import javax.faces.application.FacesMessage;
 | 
			
		||||
import javax.faces.component.UIComponent;
 | 
			
		||||
import javax.faces.context.FacesContext;
 | 
			
		||||
import javax.faces.convert.Converter;
 | 
			
		||||
import javax.faces.convert.ConverterException;
 | 
			
		||||
import javax.faces.convert.FacesConverter;
 | 
			
		||||
import javax.faces.validator.ValidatorException;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.lang3.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Converts complex time durations, using TimeFormatter
 | 
			
		||||
 * 
 | 
			
		||||
 * @author timh
 | 
			
		||||
 * @since Jan 9, 2022
 | 
			
		||||
 */
 | 
			
		||||
@FacesConverter("com.mousetech.gourmetj.utils.TimeConverter")
 | 
			
		||||
public class TimeConverter implements Converter<Integer> {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Parse incoming time string before passing to backing bean.
 | 
			
		||||
	 */
 | 
			
		||||
	@Override
 | 
			
		||||
	public Integer getAsObject(FacesContext context,
 | 
			
		||||
			UIComponent component, String value) {
 | 
			
		||||
		if (StringUtils.isBlank(value)) {
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
		Long tv = TimeFormatter.parseTime(value);
 | 
			
		||||
		if (tv == null) {
 | 
			
		||||
			throw new ConverterException(
 | 
			
		||||
					new FacesMessage("Invalid time"));
 | 
			
		||||
		}
 | 
			
		||||
		return tv.intValue();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Format display/edit text from backing bean to View
 | 
			
		||||
	 */
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getAsString(FacesContext context,
 | 
			
		||||
			UIComponent component, Integer value) {
 | 
			
		||||
		return TimeFormatter.formatTime(Long.valueOf(value));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +28,7 @@
 | 
			
		|||
	width: 20em;
 | 
			
		||||
	text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.groupItem {
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
	background-color: green;
 | 
			
		||||
| 
						 | 
				
			
			@ -92,6 +93,30 @@
 | 
			
		|||
                                    value="#{recipeDetailBean.recipe.cuisine}"
 | 
			
		||||
                                    completeMethod="#{recipeDetailBean.cuisineSuggestions}"
 | 
			
		||||
                                />
 | 
			
		||||
                                <p:outputLabel for="@next"
 | 
			
		||||
                                    value="Prep Time"
 | 
			
		||||
                                />
 | 
			
		||||
                                <p:inputText id="rpreptime"
 | 
			
		||||
                                    max="10"
 | 
			
		||||
                                    value="#{recipeDetailBean.recipe.preptime}"
 | 
			
		||||
                                >
 | 
			
		||||
                                    <f:validator validatorId="com.mousetech.gourmetj.utils.TimeValidator"/>
 | 
			
		||||
                                    <f:converter
 | 
			
		||||
                                        converterId="com.mousetech.gourmetj.utils.TimeConverter"
 | 
			
		||||
                                    />
 | 
			
		||||
                                </p:inputText>
 | 
			
		||||
                                <p:outputLabel for="@next"
 | 
			
		||||
                                    value="Cooking Time"
 | 
			
		||||
                                />
 | 
			
		||||
                                <p:inputText id="rcooktime"
 | 
			
		||||
                                    max="10"
 | 
			
		||||
                                    value="#{recipeDetailBean.recipe.cooktime}" 
 | 
			
		||||
                                >
 | 
			
		||||
                                    <f:validator validatorId="com.mousetech.gourmetj.utils.TimeValidator"/>
 | 
			
		||||
                                    <f:converter
 | 
			
		||||
                                        converterId="com.mousetech.gourmetj.utils.TimeConverter"
 | 
			
		||||
                                    />
 | 
			
		||||
                                </p:inputText>
 | 
			
		||||
                                <p:outputLabel for="@next"
 | 
			
		||||
                                    value="Rating"
 | 
			
		||||
                                />
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +307,9 @@
 | 
			
		|||
                                            />
 | 
			
		||||
                                        </p:inputText>
 | 
			
		||||
                                    </p:column>
 | 
			
		||||
                                    <p:column style="width: 2.6em">
 | 
			
		||||
                                    <p:column
 | 
			
		||||
                                        style="width: 2.6em"
 | 
			
		||||
                                    >
 | 
			
		||||
                                        <f:facet name="header">
 | 
			
		||||
                                    E
 | 
			
		||||
                                    </f:facet>
 | 
			
		||||
| 
						 | 
				
			
			@ -359,14 +386,13 @@
 | 
			
		|||
                        </p:tab>
 | 
			
		||||
                    </p:tabView>
 | 
			
		||||
                    <p:commandButton id="doSave" value="Save"
 | 
			
		||||
                        icon="ui-icon-pencil"
 | 
			
		||||
                        ajax="false"
 | 
			
		||||
                        icon="ui-icon-pencil" ajax="false"
 | 
			
		||||
                        disabled="{not recipeDetailBean.dirty}"
 | 
			
		||||
                        action="#{recipeDetailBean.doSave}"
 | 
			
		||||
                    />
 | 
			
		||||
                    <p:commandButton id="doCancel" value="Cancel"
 | 
			
		||||
                        ajax="false"
 | 
			
		||||
                        immediate="true" action="recipeDetails.jsf"
 | 
			
		||||
                        ajax="false" immediate="true"
 | 
			
		||||
                        action="recipeDetails.jsf"
 | 
			
		||||
                    />
 | 
			
		||||
                </h:form>
 | 
			
		||||
            </p:panel>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@
 | 
			
		|||
            </div>
 | 
			
		||||
        </h:form>
 | 
			
		||||
        <h:form id="form2">
 | 
			
		||||
            <p:dataTable id="table1" rows="30"
 | 
			
		||||
            <p:dataTable id="table1" rows="30" style="margin-top: 6px"
 | 
			
		||||
                value="#{adminMainBean.searchResults}" var="row"
 | 
			
		||||
                paginator="true"
 | 
			
		||||
                paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,8 @@
 | 
			
		|||
                </p:column>
 | 
			
		||||
                <p:column headerText="Prep Time">
 | 
			
		||||
                    <h:outputText
 | 
			
		||||
                        value="#{userSession.formatTime(row.preptime)}"
 | 
			
		||||
                        value="#{row.preptime}"
 | 
			
		||||
                        converter="com.mousetech.gourmetj.utils.TimeConverter"
 | 
			
		||||
                    />
 | 
			
		||||
                </p:column>
 | 
			
		||||
            </p:dataTable>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,14 +76,16 @@
 | 
			
		|||
                                    />
 | 
			
		||||
                                    <h:outputText
 | 
			
		||||
                                        label="Prep Time: "
 | 
			
		||||
                                        value="#{userSession.formatTime(recipeDetailBean.recipe.preptime)}"
 | 
			
		||||
                                        value="#{recipeDetailBean.recipe.preptime}"
 | 
			
		||||
                                        converter="com.mousetech.gourmetj.utils.TimeConverter"
 | 
			
		||||
                                    />
 | 
			
		||||
                                    <p:outputLabel for="@next"
 | 
			
		||||
                                        value="Cook Time:"
 | 
			
		||||
                                    />
 | 
			
		||||
                                    <h:outputText
 | 
			
		||||
                                        label="Cook Time: "
 | 
			
		||||
                                        value="#{userSession.formatTime(recipeDetailBean.recipe.cooktime)}"
 | 
			
		||||
                                        value="#{recipeDetailBean.recipe.cooktime}"
 | 
			
		||||
                                        converter="com.mousetech.gourmetj.utils.TimeConverter"
 | 
			
		||||
                                    />
 | 
			
		||||
                                </p:panelGrid>
 | 
			
		||||
                            </p:panelGrid>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user